一对多嵌入

时间:2017-05-09 13:26:26

标签: mongodb

这是我的数据模型问题。假设我有2个文档:出版商和图书。如果我的发布商可以发布很多书籍,我该如何决定是否要将书籍嵌入出版商或出版商的图书?

我不会问我是否应该嵌入vs参考,我问的是嵌入的方向。何时使用哪个方向。

1 个答案:

答案 0 :(得分: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名称的出版商出版,因此我们不会对其进行更新。

如果您的主要查询是发布商及其图书的列表,我会颠倒以上内容:

<强>出版商

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