Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Node.js 无法使用mongoose更新多级嵌套文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 无法使用mongoose更新多级嵌套文档

Node.js 无法使用mongoose更新多级嵌套文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我需要更新用户文档地址数组中电话数组中特定号码的验证字段。 当我想根据地址获取经过验证的电话号码数据时,我使用了聚合函数。 现在,当我尝试更新时,我不知道如何完成它 我对猫鼬和猫鼬是个新手。有人能建议我如何克服我的问题吗 我的mongo模式如下所示: User:{ name:String, age:Number, address:[ { address_line_one:String, city:String

我需要更新用户文档地址数组中电话数组中特定号码的验证字段。 当我想根据地址获取经过验证的电话号码数据时,我使用了聚合函数。 现在,当我尝试更新时,我不知道如何完成它

我对猫鼬和猫鼬是个新手。有人能建议我如何克服我的问题吗

我的mongo模式如下所示:

User:{
    name:String,
    age:Number,
    address:[
        {
            address_line_one:String,
            city:String,
            phone:[
                {
                    number:String,
                    verified:Boolean
                }
            ]
        }
    ]
}

我们可以使用数组过滤器来更新多级数组

比如说,我们在DB中有以下数据:

{
    "name" : "Marc",
    "age" : 17,
    "address" : [
        {
            "address_line_one" : "Its address line 1",
            "city" : "its city",
            "phone" : [
                {
                    "number" : "111111111",
                    "verified" : false
                },
                {
                    "number" : "222222222",
                    "verified" : false
                },
                {
                    "number" : "333333333",
                    "verified" : false
                }
            ]
        }
    ]
}
要更新电话号码111111111的验证状态,可以使用以下查询:

db.collection.update(
    {},
    {
        $set:{
            "address.$[addressFilter].phone.$[phoneFilter].verified":true
        }
    },
    {
        "arrayFilters":[
            {
                "addressFilter.phone.number":"111111111",
            },
            {
                "phoneFilter.number":"111111111"
            }
        ],
        "multi":true
    }
)
输出:

{
    "name" : "Marc",
    "age" : 17,
    "address" : [
        {
            "address_line_one" : "Its address line 1",
            "city" : "its city",
            "phone" : [
                {
                    "number" : "111111111",
                    "verified" : true   // Updated
                },
                {
                    "number" : "222222222",
                    "verified" : false
                },
                {
                    "number" : "333333333",
                    "verified" : false
                }
            ]
        }
    ]
}
这里我们使用了两个数组过滤器:“addressFilter”和“phoneFilter”

地址过滤器过滤“地址”数组中的元素,这些元素在电话数组的任何元素中都有电话号码111111111 电话过滤器过滤那些有电话号码的元素 111111111
有关阵列过滤器的更多信息,请参阅。

非常感谢。这真的帮助了我。