当前位置:  开发笔记 > 数据库 > 正文

用户加入群组的MongoDB模式策略

如何解决《用户加入群组的MongoDB模式策略》经验,为你挑选了1个好方法。

想象一下使用MongoDB的Facebook群组功能。构造数据的最佳方法是什么?

对这些数据的主要操作将是查找属于该组的用户,并确定用户X是否是该组的成员。

一种选择是在Group文档中包含字符串数组。

{
  name: "Pets United",
  members: [
    "iuahsdfuhasdfasdf",
    "qwefqwefqwefqweff",
    "ioeroigkergnknmkm"
  ]
}

另一个可能是membershipUser文档中具有一组组ID 。

{ 
  firstName: "Sergio",
  age: 27,
  groups: [
    "iuahsdfuhasdfasdf",
    "qwefqwefqwefqweff",
    "ioeroigkergnknmkm"
  ]
}

如果我希望一个小组有成千上万的用户,那么您认为哪个更好?



1> Josh Beam..:

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' })

这些只是示例,说明了执行方法(可能还有其他方法)。

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有