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

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

  • _ID
  • 用户名
  • 密码
  • …(更多基本数据)
  • 信誉点
  • 声望点的历史
  • 通知
  • 已join的用户组

基本数据通常存储在集合用户中 ,但是我不确定如何存储像朋友列表那样的复杂数据。

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

相同的通知和历史。 这与我与朋友的问题是一样的,但是在这些情况下,数组的大小可能会更大,所以使用新集合的想法更强。

我假设你正在创build某种社交networking,每个用户的朋友都是其他用户。

在MongoDB中,通常应避免仅代表文档间关系的集合。 在关系数据库中,您可以使用它们来连接表,但MongoDB不支持连接。

您应该为每个用户添加一个好友数组。 这是在MongoDB中实现多对多关系的常用方式。 但是因为你有一个关系,而不是一个聚合(朋友不属于用户 – 他们独立存在),你不应该把整个朋友对象放到这些数组中。 而不是你应该使用一个唯一的标识符,可以用来find用户集合中的朋友。 这可以是朋友的_id, DBRef或朋友的名字(只有当这些是唯一的和索引的时候)。 后一种解决scheme将允许您在不请求所有参考文档的情况下获得用户朋友的可读列表。

在用户文档中存储整个对象的反例可能是通知。 通知被发送给个人用户。 没有用户,通知是没有意义的。 如果没有收到用户的通知,您将永远不需要通知。 当用户被删除时,通知可以被删除。 所以你可以把它存储在用户文件中。