2017-05-09 5 views
-1

Dies ist ein Datenmodellproblem, das ich habe. Sagen wir, ich habe 2 Dokumente: Verleger und Bücher. Wenn mein Publisher viele Bücher veröffentlichen kann, wie kann ich entscheiden, ob ich Bücher im Publisher oder Publisher in Büchern einbetten möchte?Eins zu viele Einbettung

Ich frage nicht, ob ich vs Verweis einbetten sollte, frage ich die Richtung der Einbettung. Wann man welche Richtung benutzt.

+0

Nein Ich frage nicht, ob ich einbetten sollte oder Referenz, bitte lesen Sie meine Frage genauer. – mskw

+1

Wieder nach der Bearbeitung geöffnet, denke aber immer noch, es ist zu breit – chridam

Antwort

0

Wie immer ‚es hängt‘

auf Ihren Anfragen Abhängig -

Wenn Sie in erster Linie auf Book zu gehen suchen würde ich vorschlagen, eine Sammlung von Büchern, die, mit einem eingebetteten Verlag.

Unter der Annahme, ein Schema wie

Buch

{ 
    _id: ObjectId('507f191e810c19729de860ea'), 
    title: 'A great book', 
    publisher: { 
     _id: ObjectId('958d191e810c19629dl860io'), 
     name: 'A great publisher' 
    } 
} 

Schnell dies wie Abfrage könnte:

db.books.find({publisher._id: ObjectId("958d191e810c19629dl860io")}); 

, die von diesem Verlag alle Bücher zurückkehren wird.

Das Problem, das ich sehe, ist, wie viel Sie über den Verleger der Person, die eine book Anzeige "präsentieren" möchte. Könnten sich diese Daten ändern? Der Verlag könnte seinen Namen ändern? Dann musst du jedes Buch durchgehen und es auf den neuesten Stand bringen ... Oder würdest du es am liebsten als 'point in time fact' speichern - dh dieses Buch wurde von einem Verleger mit xyz-Namen veröffentlicht, deshalb haben wir es nicht ' t aktualisiere es.

Wenn Sie primäre Abfrage sind jedoch eine Liste der Verlage ist, und ihre Bücher, ich würde die oben umkehren:

Publishers

{ 
    _id: ObjectId('958d191e810c19629dl860io'), 
    title: 'A great publisher', 
    books: [{ 
     _id: ObjectId('507f191e810c19729de860ea'), 
     name: 'A great book' 
    }] 
}