更新嵌入文档(嵌套集合)
Update in embedded document(Nested collection)
我有一个像User这样的集合,它有一个list User,而这个User有一个list of User。像等级。
{
"_id" : ObjectId("55530326bc687d21783fd1ff"),
"Name" : "User 1",
"Role" : "Manager",
number:NumberLong(0),
"1" :
[
{
"_id" : ObjectId("55530326bc687d21783fd1fd"),
"Name" : "User 2",
"Role" : "Ass Manager",
number:NumberLong(0),
"1" :
[
.......
]
}
{
"_id" : ObjectId("55530326bc687d21783fd1fq"),
"Name" : "User 2",
"Role" : "Ass Manager",
number:NumberLong(1),
"1" :
[
.........
]
},
{
"_id" : ObjectId("55530326bc687d21783fd1fg"),
"Name" : "User 3",
"Role" : "Ass Manager",
number:NumberLong(2),
"1" :
[
........
]
}
],
"2" :
[
{
"_id" : ObjectId("55530326bc687d21783fd1fw"),
"Name" : "User 4",
"Role" : "Specialist",
number:NumberLong(0),
"1" :
[
.......
]
}
{
"_id" : ObjectId("55530326bc687d21783fd1fe"),
"Name" : "User 5",
"Role" : "Specialist",
number:NumberLong(1),
"1" :
[
.........
]
},
{
"_id" : ObjectId("55530326bc687d21783fd1fr"),
"Name" : "User 6",
"Role" : "Specialist",
number:NumberLong(2),
"1" :
[
........
]
}
]
}
上面只是一个样本集合,像这样我有近10000个文档。我需要找到'number'为0的集合。即使任何一个嵌入的文档'number'为0,我也要那个文档。
注意:我不知道一个用户会有多少个子节点。
好吧,我将假设您的每个User文档都可以有两个子用户数组(即"1"answers"2"),并且您有一个最大嵌套级别,例如3(这意味着嵌套用户不能有超过2个锚定)。顺便说一下,mongodb允许的最大嵌套级别是100。
可能这不是你想要的:在这种情况下,你的模式设计有问题,因为
- 任意嵌套的模式是不好的
- 如果键被用作索引,你应该考虑使用数组而不是对象(点击这里了解类似情况)。
现在,让我们假装我的假设对你来说是正确的。试试(我叫你的集合users
,因为我们通常不大写集合名称):
db.users.find({$or:["1.number" : 0, "2.number" : 0, "1.1.number":0, "1.2.number":0, ..., "2.2.1.number":0, "2.2.2.number":0]})
我跳过了一些需要添加的组合。请注意,您不需要担心数组中的位置,并且只有3层嵌套,$or
操作符已经有相当多的子句,这可能会说服您更好地遵循链接的最佳实践。
对未来读者的注意:OP在评论中澄清了他实际上不需要update
,而是find
查询。
相关文章:
- React:使用索引变量更新嵌套集合
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 帆嵌套集合
- 有关为嵌套集合构建模板的建议
- 具有深度嵌套集合的 Angular 性能和数据绑定
- 当更新流星中的嵌套集合时,如何为更新路径传递变量
- 正在重新构造数组的嵌套集合
- 主干保存嵌套集合
- 如何处理backbone.js中的嵌套集合
- 我应该使用嵌套集合来组织我的backbone.js应用程序吗
- Symfony 2:如何处理表单中的嵌套集合
- 主干嵌套集合
- 关于使用rails和嵌套集合的指导
- Backbone.js中的嵌套集合/模型视图管理
- 模型绑定编辑器模板中的嵌套集合
- 将Backbone.js JSON响应填充到嵌套集合/模型中的嵌套集合中
- 主干循环遍历并从嵌套集合中获取值
- 更新嵌入文档(嵌套集合)
- 如何在c#中使用嵌套集合对键值对建模
- 悬停只影响嵌套集合中的单个元素