繁体   English   中英

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

[英]Update in embedded document(Nested collection)

我有一个类似User的集合,其中User具有列表用户,而该用户具有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个文档。 我需要找到“数字”为0的集合。即使任何一个嵌入式文档的“数字”都为0,我也想要该文档。

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

好吧,我将假设您的每个User文档可以具有两个子用户数组(即“ 1”和“ 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查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM