Javascript 如何组织用户系统的Mongo集合

Javascript 如何组织用户系统的Mongo集合,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我是noSQL数据库(MongoDB)的新手,不知道如何组织集合。我有一个用户系统,每个用户都有: _身份证 用户名 密码 。。。(更多基本数据) 朋友 信誉点 名誉点的历史 通知 已加入的用户组 基本数据通常存储在集合用户中,但我不确定如何存储复杂的数据,如朋友列表 我应该在每个用户对象(在用户集合中)中像存储_id的数组一样存储朋友,还是应该创建一个新集合来只存储朋友?如果我创建这个新集合,它应该像一个user的_id和它的朋友数组,或者像user=>friend的配对 通知和历史记录也

我是noSQL数据库(MongoDB)的新手,不知道如何组织集合。我有一个用户系统,每个用户都有:

  • _身份证
  • 用户名
  • 密码
  • 。。。(更多基本数据)
  • 朋友
  • 信誉点
  • 名誉点的历史
  • 通知
  • 已加入的用户组
基本数据通常存储在集合用户中,但我不确定如何存储复杂的数据,如朋友列表

我应该在每个用户对象(在用户集合中)中像存储_id的数组一样存储朋友,还是应该创建一个新集合来只存储朋友?如果我创建这个新集合,它应该像一个user的_id和它的朋友数组,或者像user=>friend的配对


通知和历史记录也是如此。这与我在朋友方面遇到的问题相同,但在这些情况下,数组的大小可能要大得多,因此使用新集合的想法更强烈。

我假设您正在创建某种社交网络,其中每个用户的朋友都是其他用户

在MongoDB中,通常应避免只表示文档之间关系的集合。在关系数据库中,可以使用这些连接表,但MongoDB不支持连接

您应该向每个用户添加一组好友。这是在MongoDB中实现多对多关系的常用方法。但是,因为您有一个关系而不是聚合(朋友不属于用户-它们独立存在),所以不应该将整个朋友对象放入这些数组中。相反,您应该使用唯一的标识符,该标识符可用于查找用户集合中的朋友。这可以是朋友的_id、a或朋友的名称(仅当这些名称是唯一的且已编制索引时)。后一种解决方案将允许您获得用户朋友的可读列表,而无需请求所有引用的文档


在一个反例中,将整个对象存储在用户文档中是有意义的,可以是通知。将通知发送给单个用户。没有用户,通知就没有意义。如果没有收到通知的用户,您将永远不需要通知。当用户被删除时,它的通知可以随之删除。因此,您可以将其直接存储在用户文档中。

谢谢。那么您要将所有通知和历史记录放在用户对象中?然后只获取您想要的用户字段。查找(用于提高性能)。是的,我会这样做。请注意我在你发表评论后添加到我的答案中的第二段。我认为这篇关于的博客文章对一些相关的模式设计考虑有一个有用的概述。