寻找为我计划的应用程序存储数据的好方法。
我的每个成员都可以拥有“很多”用户,每个用户都可能有“非常”的项目。
至于查询,我需要:
我正在考虑去标准化和复制数据 - 长写,快速阅读但如果有人对此事有任何建议我很乐意听到它们。
答案 0 :(得分:0)
根据您对数据和应用程序查询的说法,我建议一个架构,其中member
文档包含users
数组,其中包含user
子文档。 但是,不知道这些user
文件可以获得多大或者多少"很多"单个member
会有,我无法确定这不会导致member
文档过大。
member
和user
都有ID。
然后,在单独的item
集合中,每个item
文档都有member_id
和user_id
个字段。此{ member_id: 1, user_id: 1 }
集合上的索引为item
。
使用此设置:
db.items.insert({user_id: <user_id>, member_id: <member_id>, weight: 4});
db.member.find({_id: <member_id>}, {users: 1});
db.items.find({member_id: <member_id>, user_id: <user_id>})
db.items.find({member_id: <member_id>})
此设置需要记住的重要一点是,在按用户搜索项目时,您必须指定member_id
,否则它将不会使用索引。我建议的索引({ member_id: 1, user_id: 1 }
)可用于帮助仅使用member_id
的查询,但不能用于帮助仅使用user_id
的查询。订单对索引很重要。
如果在某个时刻对items
集合进行分片是有意义的,请考虑使用member_id
作为分片键。