Ich habe eine Firebase-Datenbank. Ich habe Job-Objekte und Item-Objekte. Jeder Job kann viele Items enthalten und ein Item muss in einem einzelnen Job enthalten sein (Simple One to Many). Meine aktuelle Datenbankstruktur besteht darin, dass sowohl Artikel als auch Job Top-Level-Listen in Firebase sind und jeder Artikel den jobKey enthält, zu dem er gehört. Dies ermöglicht mir, alle Elemente in einem Job zu finden, solange ich den Jobschlüssel kenne. Der Firebase-Code, um die Elemente zu finden, erfordert eine Abfrage, die ein "orderBy" auf dem jobKey in den Elementen enthält. So ist es einfach, alle Artikel für einen Job abzurufen. Ich möchte aber auch die Elemente basierend auf zusätzlichen Daten in den Elementen sortieren und filtern. Aber wegen der Firebase-Einschränkung eines einzelnen "orderBy" kann ich diese zweite Stufe der Filterung mit Firebase nicht erreichen. Das ist meine Herausforderung. Die Struktur meiner gegenwärtigen Daten ist unten dargestellt.Eins zu viele Beziehung In Firebase
+--jobs
|
+-- jobKey1
| |
| +-- <jobdata1> ..
|
+-- jobKey2
|
+-- <jobdata2>..
+--items
|
+-- itemKey1
| |
| +-- jobKey : jobKey2 // this item belongs to job2
| |
| +-- <the rest of item1 data
|
+-- itemKey2
| |
| +-- jobKey : jobKey2 // this item belongs to job2
| |
| +-- <the rest of item2 data
|
+-- itemKey3
| |
| +-- jobKey : jobKey1 // this item belongs to job1
| |
| +-- <the rest of item3 data
|
+-- itemKey4
|
+-- jobKey : jobKey1 // this item belongs to job1
|
+-- <the rest of item4 data
Wie bereits erwähnt, mag ich in der Lage sein, alle Elemente für einen Auftrag abholen und dann bestellen und Filtereinzelteile durch verschiedenes Feld in dem Eintrag. Angesichts der oben genannten Struktur ist die einzige Möglichkeit (die ich sehe), die Firebase-Abfrage zu verwenden, um die Elemente abzurufen, und dann Logik in der Komponente zu verwenden (ich benutze angular2), um alle Elemente in eine Art Sammlung zu cachen Sortieren und Filtern basierend auf den zwischengespeicherten Daten. Das ist nicht sehr befriedigend, es muss einen besseren Weg geben. Was sind die vernünftigen Alternativen?
Vielen Dank! Dies war ein hilfreicher Beitrag. Wenn Sie alle Artikel für alle Jobs auflisten müssen, wie würden Sie das tun? Ich frage, weil ich ein ähnliches Problem habe. –
Ich dachte, Sie könnten eine neue Artikelliste mit allen Artikeldaten erstellen und die Jobelementlisten so ändern, dass sie auf die Daten verweisen und nicht die Daten speichern. Dies bedeutet jedoch, dass Sie nicht nach Daten in Jobelementlisten filtern können. Vielleicht könnten Sie eine neue Artikelliste mit Schlüsseln für alle Artikel erstellen. Aber Sie können es nicht filtern. Der Schlüssel zu Firebase-Schemas besteht darin, filterbare Listen zu erstellen. Aber filterbare Listen benötigen die filterbaren Daten in der Liste. –
Das war mein erster Gedanke, aber das bedeutet, wenn ein Job 25 Elemente hat, müsste ich die Elementliste 25 Mal abfragen, um Daten für jedes Mal zu erhalten, indem ich den Elementschlüssel in den Jobdaten verwende. Ist das korrekt? Mit dem Ansatz wie dem, den du zuletzt erwähnt hast, wenn ich auch alle Elemente abfragen möchte und ich der Administrator bin, könnte ich einfach den Jobsknoten bekommen und alle Items bekommen, oder? –