Ser*_*pia 4 mongodb mongodb-query
想象一下使用MongoDB的Facebook群组功能。构造数据的最佳方法是什么?
对这些数据的主要操作将是查找属于该组的用户,并确定用户X是否是该组的成员。
一种选择是在Group文档中包含字符串数组。
{
  name: "Pets United",
  members: [
    "iuahsdfuhasdfasdf",
    "qwefqwefqwefqweff",
    "ioeroigkergnknmkm"
  ]
}
另一个可能是membership在User文档中具有一组组ID 。
{ 
  firstName: "Sergio",
  age: 27,
  groups: [
    "iuahsdfuhasdfasdf",
    "qwefqwefqwefqweff",
    "ioeroigkergnknmkm"
  ]
}
如果我希望一个小组有成千上万的用户,那么您认为哪个更好?
TL; DR这是在管理文档和查询那些文档之间进行权衡的过程。
请记住,MongoDB文档的大小限制为16MB(使用包含字符串的数组将永远需要它,但是仍然可以)。我可能会做“人属于组”而不是“组包含人”的关系:
{ 
  firstName: "Sergio",
  age: 27,
  groups: [
    "iuahsdfuhasdfasdf",
    "qwefqwefqwefqweff",
    "ioeroigkergnknmkm"
  ]
}
与成千上万的成员相比,包含成千上万的成员的可能性更大,因此,如果根本不考虑文档大小限制(也许不会,但无论如何),我将选择“您建议的人与团体的关系。
还请记住您将如何查询数据。在第一个示例(“组包含人员”)中,要在组页面中显示用户,您需要执行以下操作:
people.find({ _id: { $in: group.members } })
而查询其他方法:
people.find({ $where: 'this.groups.indexOf(group) > -1' })
这些只是示例,说明了执行方法(可能还有其他方法)。
| 归档时间: | 
 | 
| 查看次数: | 832 次 | 
| 最近记录: |