嵌入式文档中的更新(嵌套集合)

时间:2015-08-20 04:54:52

标签: javascript mongodb

我有一个像用户列表用户的集合,该用户有用户列表。像层次结构一样。

   {        
     "_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我想要那份文件。

注意:我无法告诉用户有多少孩子。

1 个答案:

答案 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查询。