MongoDB和一对多关系

时间:2016-05-05 05:21:12

标签: mongodb meteor

我正在尝试为我们正在开发的应用程序设计一个粗略的设计。我想知道的是,如果有办法直接映射mongo中的一对多关系。

我的架构是这样的:

  • 有很多设备。
  • 每个设备都以其名称/ ID唯一地知道。
  • 每个设备都可以有多个接口。
  • 这些界面可由任何给定的前端用户添加 时间。
  • 接口通过它的ID唯一地知道,并且可以与之关联 只有一个设备。
  • 设备可以包含至少100个接口的订单。

我正在阅读MongoDB文档,其中提到了与嵌入式文档和多个集合相关的内容。我刚开始使用Mongo和meteor时,我并没有详细说明这一点。

问题是,看似更好的方法是什么?拥有多个小型集合或拥有一个大型嵌入式集合。我知道这个问题有点主观,我只需要在这个领域拥有更多专业知识的人们清楚一点。

另一个问题是,假设我使用嵌入式模型,是否有办法仅更新文档的一部分(仅针对接口),以便在添加itf时,可以将其插入到同一个文档中设备文件?

1 个答案:

答案 0 :(得分:2)

这取决于申请的目的。

大文件

如果您不打算(通常)修改数据但是您将要查询它们,那么您想要一个大型嵌入式集合的好例子就是这样。在我的应用程序中,我使用它来存储包含所有信息的预处理行程。因此,当有人想要查阅此行程时,所有信息都位于单个文档中。但是,如果您的查询基于行程中嵌入的值,则在列表中这将非常慢。如果是这种情况,我建议使用两个集合之间的关系创建另一个集合。另外,为了更新文档的一部分,它会很慢,因为它需要你获取整个文档然后更新它。

有关系的小型文件

如果您计划大量修改数据,我建议您坚持引用另一个集合。使用小文档,这将允许您更快地更新任何集合。如果要建模唯一关系,可以考虑在mongo中使用唯一索引。这可以使用:db.members.createIndex( { "user_id": 1 }, { unique: true } )完成。

因此:

  • 大对象:非常适合查询数据,但复杂查询速度慢。
  • 小型相关馆藏:非常适合更新,但需要对不同的馆藏进行多次查询。