Angenommen, wir eine Chat-Anwendung, die eine Datenbankstruktur hat, die dieser recht ähnlich sieht:
Um einen subCollection
in einem Dokument zu schreiben, verwenden Sie bitte den folgenden Code ein:
DocumentReference messageRef = db
.collection("rooms").document("roomA")
.collection("messages").document("message1");
Wenn Sie erstellen wollen messages
Sammlung und AddDocument() 1000 Mal wird sicher teuer sein, aber so funktioniert Firestore. Sie können zu Firebase Realtime Database wechseln, wenn Sie möchten, wobei die Anzahl der Schreibvorgänge keine Rolle spielt. Aber bezüglich Supported Data Types in Firestore, in der Tat können Sie ein Array verwenden, weil Supported ist. In Firebase Realtime database können Sie auch eine array
verwenden, aber das ist ein Anti-Pattern. Einer der vielen Gründe, die Firebase gegen die Verwendung von Arrays empfiehlt, ist, dass die Sicherheitsregeln nicht geschrieben werden können.
Cloud Firestore kann Arrays speichern, es unterstützt nicht die Abfrage von Array-Elementen oder die Aktualisierung einzelner Array-Elemente. Sie können diese Art von Daten jedoch immer noch modellieren, indem Sie die anderen Funktionen von Cloud Firestore nutzen. ist die Dokumentation, wo sehr gut erklärt wird.
Sie können auch keine Subcollection mit 1000 Nachrichten erstellen und alle zur Datenbank hinzufügen und gleichzeitig einen einzelnen Datensatz berücksichtigen. Es wird für jede Nachricht als eine Schreiboperation betrachtet. Insgesamt 1000 Operationen. Das obige Bild zeigt nicht, wie Daten abgerufen werden, zeigt es eine Datenbankstruktur, in der Sie etwas davon haben:
collection -> document -> subCollection -> document
Wie wollen Sie zum Beispiel Phantasie, das Hinzufügen 1000 Meldungen dynamisch (mit ihrem IDs automatisch generiert wird) in den 'messages' Sammlungen und dann das Hinzufügen diese Sammlung zu dem 'roomA' in einer Abfrage? Ich bin mir ziemlich sicher, dass das Erstellen der 'messages' Sammlung und das Aufrufen von' addDocument() '1000 mal teuer sein wird (in allen Bedeutungen). Ich suche nach einer Möglichkeit, diese Dokumente zu erstellen und sie der Untersammlung lokal zuzuweisen und dann die Untersammlung dem Dokument hinzuzufügen. Ich setze gerade ein Array von Wörterbüchern (oder hashmaps) und setze das Array als Datentyp auf das Dokument ... – rgoncalv
aber das Array von Wörterbüchern klingt nicht die beste Lösung angesichts der Kraft von Firestore. In der Tat zeigt Ihr Bild oben, wie man aus einer Untersammlung (wie in den Dokumenten) abrufen, aber wie eine Untersammlung zu einem Dokument hinzugefügt wird in den Dokumenten überhaupt nicht erklärt :( – rgoncalv
Bitte sehen Sie meine aktualisierte Antwort. –