MongoDB-Datenbank:Speichern eines Arrays von Abonnenten in einem übergeordneten Objekt

StackOverflow https://stackoverflow.com//questions/9673435

  •  12-12-2019
  •  | 
  •  

Frage

Ich habe derzeit eine Kanalsammlung, die wie folgt gespeichert ist:

{ "_id" : ObjectId("4f5d1012d48147e840000000"), "title" : "Testing", "description" : "hello!", "created" : "2012-03-11 20:50:26", "user" : ObjectId("4f5d0408d48147207f000000") }

Aber ich möchte, dass Benutzer diesen Kanal jetzt abonnieren können.Ich denke, das ist nicht wichtig genug, um als eigene Sammlung betrachtet zu werden, also möchte ich es wie folgt speichern:

{ 
    "_id" : ObjectId("4f5d1012d48147e840000000"), 
    "title" : "Testing", 
    "description" : "hello!",
    "subscriptions" : 
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME },
        { "user" : ObjectId("USERIDHERE"), "created" : DATETIME }
    "created" : "2012-03-11 20:50:26", 
    "user" : ObjectId("4f5d0408d48147207f000000") 
}

Obwohl ich anscheinend nicht verstehen kann, wie ich dies sauber in meinem Lithiumobjekt implementieren kann.Würde mein $story->vote eigenschaft ein Array sein, auf das ich bei jedem Update drücke?

War es hilfreich?

Lösung

IMHO, wie Sie das strukturieren, hängt davon ab, wie Sie Abonnements verwenden.

Der Grund, warum ich dies sage, liegt an Leistungsproblemen auf der ganzen Linie mit eingebetteten Mongo-Objekten im Vergleich zu verknüpften Sammlungen. http://www.mongodb.org/display/DOCS/Schema+Design

Anstatt die Benutzer-ID mit dem Abonnement zu versehen, würde ich vorschlagen, die Kanal-ID mit dem Benutzer zu verknüpfen (Kanal-ID als eingebettete Sammlung in dem Benutzer, der abonniert hat).

Die Verwendung hier ist sinnvoll, denn wenn Sie die Sammlung des Benutzers abrufen (für sein Control Panel oder Dashboard oder seine Startseite usw.)...) sie haben die Liste der anzuzeigenden Kanäle.

Das Einbetten der Benutzer-IDs in den Kanal ist nur sinnvoll, wenn Sie Kanäle anzeigen und alle Benutzer anzeigen möchten, die sie abonniert haben, ähnlich wie das Chat-System in Stack Overflow.

Das Einfügen in eine separate Sammlung ist sinnvoll, wenn Sie Aggregationen planen oder mehr als eine Sammlung auf Abonnements zugreifen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top