我有一个像用户列表用户的集合,该用户有用户列表。像层次结构一样。
{
"_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个文档。我需要找到有'数字'即使任何一个嵌入文档都有'数字'为0我想要那份文件。
注意:我无法告诉用户有多少孩子。
答案 0 :(得分:0)
好吧,我将假设您的每个用户文档都有两个子级用户阵列(即" 1"和#34; 2"),并且您拥有最大的嵌套等级,比如3(这意味着嵌套用户不能有超过2个安慰者)。顺便说一句,the maximum nesting level allowed by mongodb is 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
运算符已经有很多子句,这可能会说服它&#39最好遵循相关的最佳实践。
对于未来读者的注意事项:OP已在评论中澄清他实际上并不需要update
,而是find
查询。