假设我需要在mongoDB数据库中存储经理/员工关系,并且为了举例说明,这些是两个不同的集合。我通常试图通过像这样构建文档/ db来显示这种关系:
经理收集文件:
{
id: 1,
name: "Bill Smith"
}
员工收集文件:
{
id: 1,
name: "Abe Smith",
managerId: 1
},
{
id: 2,
name: "Hank Smith",
managerId: 1
}
但我经常看到人们以这种方式存储这种关系:
方法#2
经理收集文件:
{
id: 1,
name: "Bill Smith",
employees: [1, 2]
}
员工收集文件:
{
id: 1,
name: "Abe Smith"
},
{
id: 2,
name: "Hank Smith"
}
我在第二种方法中看到的缺点是,如果员工从其集合中删除而不是数组,employees
数组可能会失去同步。
我很好奇是否有人可以指出两种不同方法的优点/缺点,如果一般被认为是在MongoDB中存储这样的子关系的最佳做法?
答案 0 :(得分:5)
MongoDB博客文章6 Rules of Thumb for MongoDB Schema Design对这个主题进行了很好的讨论,并且权衡了许多优点和缺点。
还搜索" mongodb嵌入与链接"并且你会得到很多参考和意见。
答案 1 :(得分:2)
有一本关于mongoDB最佳实践的好书。 您可以阅读本书并获得最佳创意。
书名: MongoDB开发人员的50个提示和技巧 Kristina Chodorow
作为评论,选择方法#2与员工数组的大小密切相关,您修改此字段的频率如何?如何在员工中搜索?还有更多过滤器。
我推荐方法#1,每位员工都可以直接引用他/她的经理,数据类型更简单。字符串/对象与数组