MongoDB文档中的关系对象或完整对象

MongoDB文档中的关系对象或完整对象,mongodb,Mongodb,我有一个关于MongoDB的一般性问题,因为我最近发现了一个关于如何存储东西的问题 目前,有一个名为spaces的集合,如下所示: { _id: 5e1c4689429a8a0decf16f69, challengers: [ 5dfa24dce9cbc0180fb60226, 5dfa26f46719311869ac1756, 5dfa270c6719311869ac1757 ], tasks: [], owner:

我有一个关于MongoDB的一般性问题,因为我最近发现了一个关于如何存储东西的问题

目前,有一个名为spaces的集合,如下所示:

 {
    _id: 5e1c4689429a8a0decf16f69,
    challengers: [
      5dfa24dce9cbc0180fb60226,
      5dfa26f46719311869ac1756,
      5dfa270c6719311869ac1757
    ],
    tasks: [],
    owner: 5dfa24dce9cbc0180fb60226,
    name: 'testSpace',
    description: 'testSpace'
  }
如您所见,这有一个
challengers
数组,我们在其中存储
用户的
ID

如果我不存储ID,而是存储整个用户对象,减去密码等字段,这样可以吗

或者我应该继续引用其他文档的ID的引用路径吗

我的问题是,当我想浏览用户拥有的所有
空间时,我想看看哪些成员是该空间的一部分(challengers数组)。然而,我收到的是身份证,而不是姓名和电子邮件。因此,我正在努力将正确的数据发送到前端(我曾尝试过在没有运气的情况下进行一些手动操作)

因此,如果我必须继续参考的道路,那么我需要以某种方式解决我的问题

如果可以将整个对象存储在数组中,则会容易得多

然而,我想做什么是最好的做法


谢谢大家

这取决于具体的要求。嵌入文档将从原始对象分离数据。若用户更改了他的数据,挑战者中仍然会有旧数据。这可能是特性不可变的文档,其状态与创建时相同。或者问题-挑战者中有过时的数据。是的,这是一个很好的观点。考虑到用户可以更改其姓名和其他信息等,我认为将ID作为关系很好。您还可以存储一些用户数据和ID,这样您就可以轻松获取用户列表以供显示,ie用于一些非关键操作。您还可以在更新用户解决方案后更新所有嵌入的用户数据,这会使更新复杂化,但会使检索数据更容易。保留引用并使用聚合阶段在单个请求中加载所需的用户数据。是的,这就像加入SQLIt一样,取决于特定的需求。嵌入文档将从原始对象分离数据。若用户更改了他的数据,挑战者中仍然会有旧数据。这可能是特性不可变的文档,其状态与创建时相同。或者问题-挑战者中有过时的数据。是的,这是一个很好的观点。考虑到用户可以更改其姓名和其他信息等,我认为将ID作为关系很好。您还可以存储一些用户数据和ID,这样您就可以轻松获取用户列表以供显示,ie用于一些非关键操作。您还可以在更新用户解决方案后更新所有嵌入的用户数据,这会使更新复杂化,但会使检索数据更容易。保留引用并使用聚合阶段在单个请求中加载所需的用户数据。是的,这就像加入SQL一样