我不太清楚你的建議模式會如何以有效的方式爲你提供所需的信息。
我建議如下:
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