MongoDB架构存储子关系的最佳实践?

时间:2017-04-07 14:52:31

标签: mongodb database-design

假设我需要在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中存储这样的子关系的最佳做法?

2 个答案:

答案 0 :(得分:5)

MongoDB博客文章6 Rules of Thumb for MongoDB Schema Design对这个主题进行了很好的讨论,并且权衡了许多优点和缺点。

还搜索" mongodb嵌入与链接"并且你会得到很多参考和意见。

答案 1 :(得分:2)

有一本关于mongoDB最佳实践的好书。 您可以阅读本书并获得最佳创意。

  

书名: MongoDB开发人员的50个提示和技巧    Kristina Chodorow

作为评论,选择方法#2与员工数组的大小密切相关,您修改此字段的频率如何?如何在员工中搜索?还有更多过滤器。

我推荐方法#1,每位员工都可以直接引用他/她的经理,数据类型更简单。字符串/对象与数组