gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:34:12 26 4
gpt4 key购买 nike

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

  • _id
  • Username
  • Password
  • ... (more basic data)
  • Friends
  • Reputation points
  • History of the reputation points
  • Notifications
  • User groups that has joined

基本数据一般都存储在集合users中,但是我不知道如何存储像 friend 列表这样复杂的数据。

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

通知和历史记录也是如此。这是我和 friend 遇到的同样的问题,但是这些情况下数组的大小可能要大得多,所以使用新集合的想法更强烈。

最佳答案

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

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

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

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

关于javascript - 如何组织用户系统的 Mongo 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com