Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确使用MongoDb模式_Mongodb_Mongoose - Fatal编程技术网

正确使用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>})