Node.js 无法使用mongoose更新多级嵌套文档
我需要更新用户文档地址数组中电话数组中特定号码的验证字段。 当我想根据地址获取经过验证的电话号码数据时,我使用了聚合函数。 现在,当我尝试更新时,我不知道如何完成它 我对猫鼬和猫鼬是个新手。有人能建议我如何克服我的问题吗 我的mongo模式如下所示:Node.js 无法使用mongoose更新多级嵌套文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我需要更新用户文档地址数组中电话数组中特定号码的验证字段。 当我想根据地址获取经过验证的电话号码数据时,我使用了聚合函数。 现在,当我尝试更新时,我不知道如何完成它 我对猫鼬和猫鼬是个新手。有人能建议我如何克服我的问题吗 我的mongo模式如下所示: User:{ name:String, age:Number, address:[ { address_line_one:String, city:String
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
有关阵列过滤器的更多信息,请参阅。非常感谢。这真的帮助了我。