2017-05-09 35 views
-1

這是我擁有的數據模型問題。可以說我有一個2文檔:出版商和書籍。如果我的出版商可以出版很多書籍,我該如何決定是否要將圖書嵌入書籍的出版商或出版商?一對多嵌入

我不問我是否應該嵌入vs引用,我問嵌入方向。何時使用哪個方向。

+0

不,我不是問我是否應該嵌入或參考,請仔細閱讀我的問題。 – mskw

+1

編輯後重新打開,但仍認爲它太寬泛 – chridam

回答

0

與往常一樣,「這取決於」

取決於你的查詢 -

如果你將要在Book主要搜索我會建議有書籍的集合,具有嵌入式出版商。

假設像

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

的模式您可以輕鬆地查詢此類似:

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

這將由出版商返回所有書籍。

我看到的問題是您想要向查看book的人「展示」發佈商的數量。 這個數據可以改變嗎?出版商可以更改他們的名字?然後,你必須仔細閱讀每本書並更新它... 或者你更願意將它作爲一個「時間點的事實」來存儲 - 也就是說,這本書是由一個有xyz名稱的出版商出版的,因此我們不會' t更新它。

如果你然而主要的查詢是發行商的名單,他們的書,我會扭轉上面:

出版商

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