Abfrage basierend auf mehreren where-Klauseln in Feuerstellung
{
"movies": {
"movie1": {
"genre": "comedy",
"name": "As good as it gets",
"lead": "Jack Nicholson"
},
"movie2": {
"genre": "Horror",
"name": "The Shining",
"lead": "Jack Nicholson"
},
"movie3": {
"genre": "comedy",
"name": "The Mask",
"lead": "Jim Carrey"
}
}
}
Ich bin ein FB-Neuling. Wie erhalte ich ein Ergebnis aus den oben angeführten Daten wo genre = 'comedy'
UND lead = 'Jack Nicholson'
?
Welche Möglichkeiten habe ich?
für die alternative stackoverflow.com/questions/42249524/...
Mögliche Duplikate stackoverflow.com/questions/40419871/...
Mögliche Duplikate stackoverflow.com/questions/40419871/...
InformationsquelleAutor 47d_ | 2014-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Feuerstellung der Abfrage API, könnten Sie versucht sein, zu versuchen, diese:
Aber wie @RobDiMarco von FB sagt in den Kommentaren:
So mein code oben funktioniert nicht.
Kenne ich drei Ansätze, die funktionieren wird.
1. filter die meisten auf dem server, den rest auf dem client
Was Sie kann führen Sie eine
orderBy().startAt()./endAt()
auf dem server, ziehen Sie die übrigen Daten und filter, die in JavaScript-code auf dem client.2. fügen Sie eine Eigenschaft, die vereint die Werte, nach denen Sie filtern möchten
Wenn das nicht gut genug ist, sollten Sie überlegen, ändern/erweitern Ihre Daten, damit Sie Ihre use-case. Zum Beispiel: man könnte das Zeug genre+führen in eine einzelne Eigenschaft, dass Sie nur für diesen filter.
Sind Sie im wesentlichen den Aufbau Ihrer eigenen multi-column-index, die Art und Weise und kann abgefragt werden mit:
David Osten geschrieben hat, eine Bibliothek namens QueryBase, das hilft mit der Erzeugung solcher Eigenschaften.
Konnten Sie sogar relativ/Palette Abfragen, sagen wir mal, das Sie zulassen möchten, dass Abfragen Filme nach Kategorie und Jahr. Sie würden diese Daten nutzen, Struktur:
Und dann Abfrage für Komödien der 90er-Jahre mit:
Wenn Sie brauchen, um filter auf mehr als nur das Jahr, stellen Sie sicher, dass Sie die andere Datums-Teile in absteigender Reihenfolge, z.B.
"comedy_1997-12-25"
. Auf diese Weise wird die lexikographische Ordnung, die FB nicht auf string-Werte werden die gleichen sein, wie die chronologische bestellen.Diese Kombination der Werte in einer Eigenschaft kann mehr als zwei Werte, aber Sie können nur tun, eine Reihe von filtern auf den letzten Wert in der zusammengesetzten Eigenschaft.
Eine sehr spezielle Variante umgesetzt wird dies durch die GeoFire Bibliothek für FB. Diese Bibliothek vereint die latitude und longitude einer location in einen sogenannten Geohash, die dann verwendet werden können, zu tun, Echtzeit-Spektrum-Abfragen auf FB.
3. erstellen Sie einen benutzerdefinierten index programmgesteuert
Doch eine andere alternative ist, zu tun, was haben wir alle getan vor dieser neuen Query-API wurde Hinzugefügt: erstellen Sie einen index in einem anderen Knoten:
Wahrscheinlich gibt es noch weitere Ansätze. Zum Beispiel, diese Antwort weist auf eine alternative Baum-förmigen benutzerdefinierte index: https://stackoverflow.com/a/34105063
orderBy()
fordert, wird keinen Fehler werfen, weil die Kunden derzeit zu unvorhergesehenen Ergebnissen führen. Es ist möglich, dass Sie zufälligerweise arbeitete im test, aber ist nicht gebaut, um diese Arbeit allgemein (obwohl wir lieben würde, um es hinzuzufügen!).Ist das noch relevant, im Jahr 2016 mit FB V3? Gibt es nicht bessere Wege, dies zu tun?
Warum können wir nicht verwenden
.equalTo('comedy')
statt.startAt('comedy').endAt('comedy')
?Es ist 2018, gibt es keine einfache Lösung für dieses? Das ist wie die Abfrage 101, die in relationalen-Datenbank. Und angesichts all der Kommentare auf Davids video reden über SQL #8, ich hätte mir erwartet, dass Google das Problem beheben, indem nun. Habe vermisse ich etwas update?
Nein, Sie nicht. Ich weiß nicht warum, aber Google ist ziemlich langsam machen FB-Datenbank besser. Ich weiß, Firestore, aber es ist einfach nicht gut. Fehlt gut Abfragen.
InformationsquelleAutor Frank van Puffelen
Ich geschrieben habe, in einer persönlichen Bibliothek, die Ihnen erlaubt, um nach mehreren Werten, mit der alle Bestelldaten auf dem server ausgeführt.
Meet Querybase!
Querybase nimmt in einer FB-Datenbank-Referenz und ein array der Felder, die Sie wollen, um den index auf. Wenn Sie neue Datensätze erstellen, wird es automatisch Griff der Erzeugung von Schlüsseln zulassen, dass für mehrere Abfragen. Der Nachteil ist, dass es unterstützt nur gerade Gleichwertigkeit (nicht weniger als oder größer als).
Es ist geschrieben in TS! Also einfach importieren 🙂
wissen Sie, warum Sie aus der Datenbank so restriktiv ?
Jede option, um eine Swift-IOS - /Android-version
David, jedes android - /Java-äquivalenz?
InformationsquelleAutor David East
Er baute es zu Film-Objekt und vorausgesetzt, es gibt eine getLead() metho.
Thankz a lot. Es funktioniert wie eine where-Klauseln
InformationsquelleAutor Andrew Lam Yat Weng
Dies funktionieren wird.
InformationsquelleAutor jaleel