Was ist der beste Weg, um Daten aus Sammlungen zu erhalten, die in Dokumenten in Firestore verschachtelt sind?

9

Ich gehe durch die Firestore Dokumentation und Anleitung. Meine folgenden Codebeispiele verwenden AngularFire2.

Betrachten wir eine "Chats" -Kollektion, die den hier angegebenen Beispielen ähnelt: Ссылка

Sie empfehlen diese Art von Struktur, aber ich sehe nicht, wo sie diskutieren, alle Daten effizient zu bekommen.

Jedes Chat-Dokument hat Eigenschaften, eine Sammlung von Mitgliedern und eine Sammlung von Nachrichten:

  • chatsCollection
    • chatDocument
      • [Chat-Datenfelder hier einfügen]
      • membersCollection
        • memberDocument
          • [Elementdatenfelder hier einfügen]
      • messagesCollection
        • nachrichtDokument
          • [Nachrichtendatenfelder hier einfügen]

Firestore-Abfragen sind oberflächlich, was manchmal großartig sein könnte. Mein Verständnis ist, dass es keine eingebackene Möglichkeit gibt, tief zu suchen und verschachtelte Sammlungen zu bekommen. Also, was sind die besten Praktiken und die meisten stressfreien Möglichkeiten, dies zu tun?

Momentan lade ich Schnappschüsse zu Objekten mit IDs ab und ordne sie zu und füge die verschachtelten Sammlungsdaten mit zusätzlichen Abfragen und Mappings zu den Elterndokumentdaten hinzu, und ich bin mit meinem Ansatz nicht zufrieden und könnte es sogar schneller machen mit denormalisierten Firebase-Strukturen.

In diesem Codebeispiel wird nur auf die Mitglieder verwiesen, das Hinzufügen von Nachrichten ist eine ganz andere Geschichte ...

%Vor%

Und aus dem Service:

%Vor%     
Methodician 24.10.2017, 15:30
quelle

1 Antwort

0

Der Ansatz, den Sie gepostet haben, scheint zu funktionieren und für eine große Chat-Anwendung möchten Sie wahrscheinlich nicht jedes einzelne Ereignis verfolgen, das in jedem Chatraum passiert, da dies eine Menge Daten sein könnte. Stattdessen wäre es wahrscheinlich besser, nur das zu abonnieren, was benötigt wird, und periodische Updates mit Cloud-Funktionen und Cloud-Messaging zu erledigen.

Durch die Verwendung einer Hilfsfunktion observeCollection sowie durch kleine Codeumstrukturierungen würde der Dienst bereinigt und Observables für jeden Chatraum erstellt, der inaktiv bleiben würde, bis sie abonniert sind.

%Vor%

In der Anwendung konnten Sie dann nur die aktuell ausgewählten Chatrooms Mitglieder und Nachrichten beobachten, die Daten speichern würden. Da dieser Beitrag mit eckigen Async-Pipes getaggt wird, würde das automatische Subskriptionen automatisch helfen.

In Ihrer Komponente:

%Vor%

In Ihrer Vorlage:

%Vor%     
adamduren 28.02.2018 23:04
quelle