正确使用MongoDb模式
正在为我计划的应用程序寻找存储数据的好方法 我的每个成员都可以有“许多”用户,每个用户都可以有潜在的“无数”项 至于查询,我需要:正确使用MongoDb模式,mongodb,mongoose,Mongodb,Mongoose,正在为我计划的应用程序寻找存储数据的好方法 我的每个成员都可以有“许多”用户,每个用户都可以有潜在的“无数”项 至于查询,我需要: 添加新项目 按成员获取所有用户 按用户获取所有项目。无需访问特定项目 按成员获取所有项目 我正在考虑对数据进行非规范化和复制—长写、快读,但如果有人对此有任何建议,我很乐意听取。根据您对数据和应用程序查询的介绍,我建议使用一种模式,其中成员文档包含一个用户数组,该数组包含用户子文档。但是,由于不知道这些用户文档能有多大,或者单个成员将有多少个,我无法确定这是否会
- 添加新项目
- 按成员获取所有用户
- 按用户获取所有项目。无需访问特定项目
- 按成员获取所有项目
我正在考虑对数据进行非规范化和复制—长写、快读,但如果有人对此有任何建议,我很乐意听取。根据您对数据和应用程序查询的介绍,我建议使用一种模式,其中
成员
文档包含一个用户
数组,该数组包含用户
子文档。但是,由于不知道这些用户
文档能有多大,或者单个成员
将有多少个,我无法确定这是否会导致成员
文档变得太大
成员
和用户
都有ID
然后,在一个单独的项目
集合中,每个项目
文档都有成员id
和用户id
字段。此项
集合上有一个{member\u id:1,user\u id:1}
索引
使用此设置:
添加新项目
db.items.insert({user\u id:,member\u id:,weight:4});
按成员获取所有用户
db.member.find({u id:},{users:1});
按用户获取所有项目
db.items.find({member\u id:,user\u id:})
按成员获取所有项目
db.items.find({member\u id:})
此设置需要记住的重要一点是,按用户搜索项目时,您必须指定成员id
,否则它将不使用索引。我建议的索引({member\u id:1,user\u id:1}
)可用于帮助仅使用成员id
的查询,但不能用于帮助仅使用用户id
的查询。顺序与索引有关
如果在某一点碎片化<代码>项目集合,请考虑使用<代码>成员ID ID/COD>作为碎片密钥。
用户可以拥有多于一个成员吗?不,成员有自己的用户集。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>})