我不太清楚你的建议模式会如何以有效的方式为你提供所需的信息。
我建议如下:
db.groups {
_id: <group code>,
creator: <UUID of creator>,
}
db.members {
_id: <UUID of group member>,
groupCode: <group code>
referrals: [
<UUID of referred user>
]
referralCount: <size of referrals array for speed/convenience>
}
CREATE GROUP :
db.groups.save({_id: <group code>, creator:<UUID of creator>})
db.members.save({_id:<UUID of creator>, groupCode: <group code>})
REFER USER :
db.members.update({_id: <UUID of referrer>}, {$push:{referrals: <UUID of referred user}, $inc:{referralCount:1}})
FOR A GIVEN CODE, HOW MANY PEOPLE DID YOU REFER :
db.members.find({_id: <UUID of user>, groupCode: <group code>}) -> first result .referralCount
WHICH CODES IS A USER PART OF :
db.members.find({_id: <UUID of user>}) -> results .groupCode
OR
db.members.distinct("groupCode", {_id: <UUID of user>}) for a direct array of codes
的原因我会分裂它,是因为维护组内的成员列表文档作为嵌入式阵列将复杂某些更新,可能会碰到16MB文档限制,并会大幅增加您的查询的带宽需求(请注意,在这种情况下,您必须为每个成员查询找到整个组文档)。
希望有所帮助。
是的,当我想到设计效率不是我关心的。我试图想到我可以存储的最简单和最少量的数据,以便捕获我需要的所有信息。但是这是一个很好的信息,因为比我更有经验的设计mongodb集合的人可以提出一个更好的方法,记住效率。谢谢! – mike