2016-04-01 3 views

Antwort

2

Nein. Aber irgendwie.

Sie können keine Platzhalterabfrage ausführen, Sie können jedoch Ihre Daten so strukturieren, dass dies möglich ist.

Zum Beispiel, sagen wir Treffern für die Benutzer, deren Namen mit Ler beginnt finden wollen

unsere Struktur Hier ist

users 
    uid_0 
    name: "Leroy" 

Speichern Sie die zerlegt Daten in einem anderen Knoten: Denken Sie daran, Speicherplatz ist billig.

decomposed 
    uid_0 
    L: true 
    Le: true 
    Ler: true 
    Lero: true 
    Leroy: true 

dann eine Abfrage auf dem zerlegt Knoten für den Wert true für Kinder durchführen gleich

ref.queryOrderedByChild("Ler").queryEqualToValue(true).observeEventType(.ChildAdded, 
    withBlock: { snapshot in 
        print(snapshot.key) 
       }) 

LER Und die snapshot.key wird uid_0

+2

Das ist ein interessanter Weg, um das zu erreichen, was ich brauche. Das einzige Problem ist, dass ich einen Platzhalter für einen beliebigen Teil eines Namens (z. B. * roy *) machen muss. Außerdem werde ich ~ 200K Leute in meinem db haben. Wird es skalieren? – MoreScratch

+0

Es kann skalieren (Firebase ist skalierbar), aber es ist wahrscheinlich nicht realistisch für diese Größe eines Datensatzes. Wenn Sie nur nach einem Autofill suchen, wo Sie die ersten paar Buchstaben eingeben, einen Nachnamen, dann ist es realistischer. Wir haben eine ObjC-Klasse erstellt, der wir einen Namen geben können, und sie wird den Namen in alle durchsuchbaren Kombinationen zerlegen und dann in einem Firebase-Knoten speichern. Damit fühlt es sich ziemlich automatisiert an, aber wir haben nicht versucht mit Tausenden von Namen zu arbeiten. Das ist wahrscheinlich eine gute Frage für das Firebase-Team. – Jay

+1

Stellen Sie sich vor, Sie möchten in allen Zeichenfolgenfeldern Ihrer Datenbank eine Platzhaltersuche durchführen. Es ist nicht praktikabel, jeden Wert jedes Felds in N Kombinationen zu zerlegen – Oswaldo

-2

Da Firebase nicht unterstützt Wildcard-Suche Ich habe mich entschieden, mit Apigee BaaS für unsere Firma zu gehen.

+3

wie ist das eine Antwort für Ihre Frage? – mamu

+0

Ich musste die Schleife auf die Frage schließen. Mir war klar, dass es in Firebase keine Lösung gibt. Deshalb haben wir uns entschieden, unseren BaaS-Anbieter einfach zu wechseln. Im Wesentlichen gibt es keine Antwort, die wir aufgrund der Dokumentation und der Antworten auf die Frage sehen können. – MoreScratch

+0

Sie bieten keine Erklärung, wie es Ihr Problem gelöst hat, oder hat es wirklich Ihre Frage beantwortet. – Learn2Code

6

Ich weiß, es ist eine Weile her, aber ich dachte, dass andere daran interessiert sein könnten. Sie können eine Platzhaltersuche für Dinge wie foo* "fälschen" (so können Sie grundsätzlich nach Werten suchen, die mit einer angegebenen Zeichenfolge beginnen).

Für iOS & Swift würde es so aussehen:

dbReference.child("person").queryOrdered(byChild: "name").queryStarting(atValue: "foo").queryEnding(atValue: "foo\u{f8ff}").observe(.childAdded) { (snapshot: FIRDataSnapshot) in 
    print("\(snapshot.key) - \(String(describing: snapshot.value))") 
} 

Was dies bedeutet ist ein Anfangs- und Endwerte für name Eigenschaft verwendet, wo das Ende-Taste zum Start gleich + sehr hohen Codepunkt in der Unicode-Bereich. Da es sich um die meisten regulären Zeichen in Unicode handelt, stimmt die Abfrage mit allen Werten überein, die mit foo beginnen.

+0

Brilliant Antwort Freund .. Prost –