-1
這是我擁有的數據模型問題。可以說我有一個2文檔:出版商和書籍。如果我的出版商可以出版很多書籍,我該如何決定是否要將圖書嵌入書籍的出版商或出版商?一對多嵌入
我不問我是否應該嵌入vs引用,我問嵌入方向。何時使用哪個方向。
這是我擁有的數據模型問題。可以說我有一個2文檔:出版商和書籍。如果我的出版商可以出版很多書籍,我該如何決定是否要將圖書嵌入書籍的出版商或出版商?一對多嵌入
我不問我是否應該嵌入vs引用,我問嵌入方向。何時使用哪個方向。
與往常一樣,「這取決於」
取決於你的查詢 -
如果你將要在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'
}]
}
不,我不是問我是否應該嵌入或參考,請仔細閱讀我的問題。 – mskw
編輯後重新打開,但仍認爲它太寬泛 – chridam