Mongodb 如何设计nosql模式来将用户与;“朋友”;实际上谁是其他用户?

Mongodb 如何设计nosql模式来将用户与;“朋友”;实际上谁是其他用户?,mongodb,scaling,relation,nosql,Mongodb,Scaling,Relation,Nosql,我是否重写朋友的用户数据?每次我“添加朋友”时,我是再次输入数据还是与另一个用户“id”字段“关联”?您的文档结构应基于您的数据访问模式,即您的程序访问数据的方式。在上面给出的示例中,您处理的是一对多关系,因为对于许多朋友,只有一个“约翰·史密斯”。“John Smith”的朋友可以是彼此的朋友,您可以通过使用朋友的“\u id”来处理这些朋友,就像您所做的那样放置在一个数组中。这将降低修改数据时出现异常的风险 User { _id: "my_user", name: "john

我是否重写朋友的用户数据?每次我“添加朋友”时,我是再次输入数据还是与另一个用户“id”字段“关联”?

您的文档结构应基于您的数据访问模式,即您的程序访问数据的方式。在上面给出的示例中,您处理的是一对多关系,因为对于许多朋友,只有一个“约翰·史密斯”。“John Smith”的朋友可以是彼此的朋友,您可以通过使用朋友的“\u id”来处理这些朋友,就像您所做的那样放置在一个数组中。这将降低修改数据时出现异常的风险

User {
    _id: "my_user",
    name: "john smith",
    email: "blah@test.com,
    friends: [
      *More Users*
    ]
}

另一种选择是嵌入数据,但这可能导致重复和修改异常,因此应避免,除非出于性能原因需要这样做

这个问题问得很多。请将此作为启动程序阅读:。没有完美的答案。这取决于你的需要。谢谢。所以我会通过使用两个find()调用来访问一个friends用户的数据,对吗,就像没有办法使用一个一样?您认为使用_id作为用户名而不使用和objectid怎么样?find调用的数量取决于您的应用程序。上面的代码在两个文档之间创建一个链接,以便您知道每个用户的朋友是谁。我的假设是,你有很多用户,其中任何一个都可能是另一个的朋友,这是正确的吗?如果你使用用户名作为id,你可能会得到重复的用户名。在应用程序中,将对象_id指定给一个变量,并使用该变量更新好友数组。@user979663也可能有用
User1 {
  _id: "my_user1",
  name: "john smith",
  email: "blah@test.com,
  friends: [
    "my_user2",
    "my_user3",
    "my_user4",
  ]
}

User2 {
  _id: "my_user1",
  name: "john smith",
  email: "blah@test.com,
  friends: [
    "my_user1",
    "my_user3",
    "my_user4",
  ]
}