Ich dachte, ich hätte gelesen, dass Sie mit dem neuen Firebase Firestore Untersammlungen abfragen können, aber ich sehe keine Beispiele. Zum Beispiel habe ich mein Firestore-Setup folgendermaßen:
- Tänze [Sammlung]
- Tanzname
- Lieder [Sammlung]
- Liedtitel
Wie könnte ich "Alle Tänze finden, bei denen songName == 'X'" abfragen?
firebase
google-cloud-firestore
Nelson.b.austin
quelle
quelle
Antworten:
Update 2019-05-07
Heute haben wir Sammlungsgruppenabfragen veröffentlicht , mit denen Sie Abfragen über Untersammlungen hinweg durchführen können.
So zum Beispiel im Web-SDK:
Dies würde mit Dokumenten in jeder Sammlung übereinstimmen, in der der letzte Teil des Sammlungspfads "Songs" ist.
Ihre ursprüngliche Frage betraf das Finden von Tänzen, bei denen songName == 'X' ist. Dies ist jedoch immer noch nicht direkt möglich. Für jeden passenden Song können Sie jedoch den übergeordneten Song laden.
Ursprüngliche Antwort
Dies ist eine Funktion, die es noch nicht gibt. Es wird als "Sammlungsgruppenabfrage" bezeichnet und ermöglicht es Ihnen, alle Songs abzufragen, unabhängig davon, welcher Tanz sie enthielt. Dies ist etwas, das wir unterstützen wollen, aber keinen konkreten Zeitplan haben, wann es kommt.
Die alternative Struktur an dieser Stelle besteht darin, Songs zu einer Top-Level-Sammlung zu machen und zu bestimmen, welcher Tanz des Songs Teil einer Eigenschaft des Songs ist.
quelle
UPDATE Now Firestore unterstützt Array-enthält
Diese Dokumente haben
mach es so
@ Nelson.b.austin Da Firestore das noch nicht hat, empfehle ich Ihnen eine flache Struktur, was bedeutet:
Wenn Sie es auf diese Weise haben, können Sie es erledigen:
Ich hoffe das hilft.
quelle
songName_Title3: false
nützlich? Wenn ich mich nicht irre, kann es nur verwendet werden, um nach Tänzen zu suchen, die keinen bestimmten Songnamen haben, vorausgesetzt, wir brauchen einesongName_Title3: false
, umdances.where("songName_"+songTitle, "==", false);
solche Ergebnisse zurückzugeben. Es wäre nicht sinnvoll, wenn jeder Tanz boolesche Flaggen für jedes mögliche Lied hätte Name ...Was ist, wenn Sie Songs als Objekt anstatt als Sammlung speichern? Jeder Tanz als, mit Liedern als Feld: Typ Objekt (keine Sammlung)
dann könnten Sie mit aNameOfASong nach allen Tänzen fragen:
quelle
UPDATE 2019
Firestore hat Sammelgruppenabfragen veröffentlicht. Siehe Gils Antwort oben oder die offizielle Abfragedokumentation für Sammlungsgruppen
Vorherige Antwort
Wie Gil Gilbert feststellte, scheinen derzeit Abfragen von Sammlungsgruppen in Arbeit zu sein. In der Zwischenzeit ist es wahrscheinlich besser, Sammlungen auf Stammebene zu verwenden und diese Sammlungen einfach mithilfe der Dokument-UIDs zu verknüpfen.
Für diejenigen, die es noch nicht wissen, hat Jeff Delaney einige unglaubliche Anleitungen und Ressourcen für alle, die mit Firebase (und Angular) auf AngularFirebase arbeiten .
Firestore NoSQL Relational Data Modeling - Hier werden die Grundlagen der NoSQL- und Firestore DB-Strukturierung erläutert
Erweiterte Datenmodellierung mit Firestore anhand eines Beispiels - Dies sind erweiterte Techniken, die Sie im Hinterkopf behalten sollten. Eine großartige Lektüre für diejenigen, die ihre Firestore-Fähigkeiten auf die nächste Stufe heben möchten
quelle
NEUES UPDATE 8. Juli 2019:
quelle
Sie können immer so suchen: -
quelle
quelle
quelle
Es könnte besser sein, eine flache Datenstruktur zu verwenden.
In den Dokumenten werden die Vor- und Nachteile verschiedener Datenstrukturen auf dieser Seite angegeben .
Speziell zu den Einschränkungen von Strukturen mit Untersammlungen:
Im Gegensatz zu den angeblichen Vorteilen einer flachen Datenstruktur:
quelle
Ich habe eine Lösung gefunden. Bitte prüfen Sie das.
Anschließend können Sie in Ihrem Cloud-Firestore unter console.firebase.google.com die Registerkarten Daten, Regeln, Indizes und Verwendung anzeigen. Schließlich sollten Sie Indizes auf der Registerkarte Indizes festlegen.
Geben Sie hier die Sammlungs-ID und einen Feldwert ein. Wählen Sie dann die Sammlungsgruppenoption aus. Geniesse es. Vielen Dank
quelle
Ich arbeite hier mit Observables und dem AngularFire- Wrapper, aber so habe ich das geschafft.
Es ist irgendwie verrückt, ich lerne immer noch über Observable und habe es möglicherweise übertrieben. Aber es war eine schöne Übung.
Einige Erklärungen (kein RxJS-Experte):
in
abzufragen, staple ich sie in Eimern von 10 (der maximale Winkel wird für eine Abfrage benötigt.Ich habe meinen Code kopiert und die Variablennamen in Ihre geändert. Ich bin mir nicht sicher, ob es Fehler gibt, aber es hat gut funktioniert. Lassen Sie mich wissen, wenn Sie Fehler finden oder einen besseren Weg vorschlagen, um sie mit einem nachgebildeten Firestore zu testen.
quelle