Eckige FireStore-Sammlungen in Dokumenten

10

Ich versuche, in Angular 2 eine Chat-App mit der Firebase FireStore-Datenbank zu erstellen.
Ich konnte ein Collection mit einem Docuement für jede 'Nachricht' erstellen. Ich habe diesen Code verwendet, um die Nachrichten abzurufen:

%Vor%

Da ich jedoch mehrere Benutzer haben möchte, möchte ich für jeden Benutzer eine Document erstellen, die in einem Collection der Nachrichten speichert.
Das macht es komplizierter, und ich bin mir nicht sicher, wie ich das genau machen soll Ich wäre glücklich für eine Anleitung.

    
amitairos 28.11.2017, 11:07
quelle

2 Antworten

2

Eine mögliche Route besteht darin, die Sammlung von Dokumenten nicht als "Nachrichten" zu speichern, sondern als eine Sammlung von "Konversationen" und in jedem "Konversations" -Dokument ein einfaches Array von "DocumentReferences" zu erstellen. das referenzieren die zwei Benutzer in dieser Konversation. Sie können auch einfach die UIDs jedes Benutzers speichern und dann den Benutzer bei Bedarf abrufen. Innerhalb des "Conversation" -Dokuments hätten Sie dann eine Sammlung von Nachrichten zwischen den beiden Benutzern. Dies ist ein Ansatz, den ich wählen würde, und wenn Sie mehr Unterstützung benötigen, kann ich den Mockup-Service und die Datenstruktur als Beispiel erstellen. Kurz gesagt, das Speichern der Konversationen hilft hier bei der Struktur.

Hier ist ein Beispiel, wie ich die Firestore-Struktur einrichten würde:

Hier in der Konversations-Sammlung würde ich ein Array von DocumentReferences für die Benutzer speichern und dann eine Sammlung von Nachrichten im Zusammenhang mit dieser Konversation haben.

Jetzt hier in der Benutzersammlung würde ich ein Dokument für jeden Benutzer haben, wo die Dokumenten-Identifikation die UID vom authentifizierten Benutzer ist. Dies mag redundant erscheinen, aber ich würde auch eine Conversations-Sammlung in der Benutzersammlung erstellen, wo jedes Dokument nur ein einziges Feld hat, das eine DocumentReference für das Konversationsdokument ist. Hier ist ein Beispiel dieses Dokuments in der Convos-Sammlung:

Auf diese Weise können Sie verhindern, dass Benutzer doppelte Konversationsdokumente in der Conversations-Sammlung erstellen können. Sie müssen lediglich sicherstellen, dass Sie die Konversationsreferenz nach dem Start der Konversation in jeder Benutzerkonvos-Sammlung speichern.

Beim Abrufen der Daten von einem Dienst müssten Sie dann snapshotChanges und diesen Referenzpfad abrufen und dann die Konversation innerhalb Ihrer Map-Funktion im Snapshot anfordern. Bitte lassen Sie mich wissen, wenn Sie eine Anleitung für den Service benötigen, nachdem Sie dies erstellt und Ihren Service mit angularfire2 eingerichtet haben.

    
Nicholas Pesa 02.12.2017 00:05
quelle
1

Es gibt viele Wege zu gehen, aber diese bauen eine Echtzeit-Chat-App mit VueJS, Vuex & amp; Cloud Firestore zeigt eine ziemlich gute Implementierung in vue.

Dies ist ihr Konversationsdokument.

Konversationsstruktur

%Vor%

Die Funktionsweise von AngularFire2 finden Sie unter Einfache Chat-App mit AngularFire2 (Firebase + Angular 2) . Es verwendet eine Konversation mit Nachrichten als Dokumente.

    
Richard Matsen 03.12.2017 00:49
quelle