Ist es möglich, Platzhalterabfragen in Firebase durchzuführen? Zum Beispiel:Wildcard-Abfrage auf Firebase?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
Ist es möglich, Platzhalterabfragen in Firebase durchzuführen? Zum Beispiel:Wildcard-Abfrage auf Firebase?
https://foo.firebaseio.com/person.json?orderBy="name"&equalTo="Lun*"
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
Da Firebase nicht unterstützt Wildcard-Suche Ich habe mich entschieden, mit Apigee BaaS für unsere Firma zu gehen.
wie ist das eine Antwort für Ihre Frage? – mamu
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
Sie bieten keine Erklärung, wie es Ihr Problem gelöst hat, oder hat es wirklich Ihre Frage beantwortet. – Learn2Code
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.
Brilliant Antwort Freund .. Prost –
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
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
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