MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB und Mongoose:Verschachteltes Array von Dokumentreferenz-IDs

Bezüglich Ihrer ersten Frage:

Sie fragen ausdrücklich nach einer besseren Möglichkeit, mit untergeordneten IDs zu arbeiten, die im übergeordneten Element gespeichert sind. Ich bin mir ziemlich sicher, dass es keinen besseren Weg gibt, damit umzugehen, wenn es dieses Muster sein muss.

Aber dieses Problem existiert auch in relationalen Datenbanken. Wenn Sie Ihren Beitrag in einer relationalen Datenbank (mit diesem Muster) speichern möchten, müssen Sie auch zuerst den Kommentar erstellen, seine ID abrufen und dann den Beitrag aktualisieren. Zugegeben, Sie können all diese Aufgaben in einer einzigen Anfrage senden, was wahrscheinlich effizienter ist als die Verwendung von Mongoose, aber die Art der zu erledigenden Arbeit ist die gleiche.

Zu Ihrer zweiten Frage:

Der Vorteil gegenüber Variante A ist, dass Sie beispielsweise den Beitrag abrufen können und sofort wissen, wie viele Kommentare er enthält, ohne die Mongodb zu bitten, wahrscheinlich Hunderte von Dokumenten durchzugehen.

Der Vorteil gegenüber Variante B ist, dass Sie mehr Referenzen hinterlegen können zu Kommentaren in einem einzelnen Dokument (einem einzelnen Beitrag), als ganz Kommentare, wegen Mongos 16 MB Dokumentengröße.

Der Nachteil ist jedoch der von Ihnen erwähnte, dass es ineffizient ist, diese Struktur aufrechtzuerhalten. Ich nehme an, dass dies nur ein Beispiel ist, um das Szenario zu veranschaulichen, also würde ich Folgendes tun:Ich würde von Fall zu Fall entscheiden, was ich verwenden möchte.

  • Wenn das Dokument viel gelesen und nicht viel geschrieben wird, AND Es ist unwahrscheinlich, dass es größer als 16 MB wird:Betten Sie das Unterdokument ein. Auf diese Weise erhalten Sie alle Daten in einer einzigen Abfrage.

  • Wenn Sie mehrere auf das Dokument verweisen müssen andere Dokumente UND Ihre Daten müssen wirklich konsistent sein, dann bleibt Ihnen nichts anderes übrig, als darauf zu verweisen.

  • Wenn Sie mehrere auf das Dokument verweisen müssen andere Dokumente ABER Datenkonsistenz ist nicht so super wichtig UND die Einschränkungen aus dem ersten Aufzählungspunkt gelten, dann betten Sie die Unterdokumente ein und schreiben Sie Code, um Ihre Daten konsistent zu halten.

  • Wenn Sie mehrere auf das Dokument verweisen müssen andere Dokumente, und sie werden viel geschrieben, aber nicht so oft gelesen, ist es wahrscheinlich besser, auf sie zu verweisen, da dies einfacher zu codieren ist, da Sie keinen Code schreiben müssen, um doppelte Daten zu synchronisieren.

In diesem speziellen Fall (Beitrag/Kommentar) Verweis auf den Elternteil des Kindes (dem Kind die Eltern _id mitteilen ) ist wahrscheinlich eine gute Idee, da es einfacher zu warten ist als umgekehrt, und das Dokument möglicherweise größer als 16 MB wird, wenn sie direkt eingebettet werden. Wenn ich sicher wüsste, dass das Dokument NICHT größer als 16 MB ist, wäre es besser, sie einzubetten, weil es so schneller ist, die Daten abzufragen