首页 > 解决方案 > MongoDB架构设计,我可以同时嵌入和引用数据吗?

问题描述

我是 MongoDB 新手,我已经阅读了许多关于嵌入和引用文档的优缺点的建议,但找不到任何同时使用这两种方法的示例。例如,如果我想建立一个朋友列表,并且每次有人想看到他们的朋友列表时只想看到名字和头像,我可以将这些数据与朋友对象的 id 一起嵌入吗?这些数据是重复的,但它会节省所需的查询次数。

person = {
  _id: '123abv',
  name: 'bob',
  profilePic: '...',
  ...other props,
  friends: [
    {
      _id: '124sdf',
      name: 'tom',
      profilePic: '...'
    },
    ...other friends
  ]
}

标签: mongodbmongodb-queryschema

解决方案


MongoDB 模式设计几乎每次都取决于您的应用程序将要执行的查询以提高速度。复制信息的主要缺点是它需要的空间以及更新嵌入文档以及文档本身所需的额外工作。

我的建议是:

  • 如果您的应用程序主要用于查询文档,它几乎没有更新并且空间不是问题(现在往往不是),您可以复制信息以提高速度。它将帮助您避免复杂的聚合并在数据库中查找查询。
  • 如果您的应用程序遭受大量更新并且文档之间存在关系,首先,我建议检查关系数据库,因为它们在解决关系时具有更好的性能。如果 MongoDB 是强制性的,我可能会在不复制信息的情况下引用该文档,从而留下一些性能。无论如何,在数据库中实现分片或索引总是可以提高性能。

推荐阅读