Reputation: 169
I need to update the the verified field of a specific number in the phone array inside address array of a user document. I used aggregate https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate function when I want to fetch verified phone number data based on based on address. Now I when I am trying to update, I am not sure how to get it done.
I am new to mongodb and mongoose. Can anyone suggest me how do I get over my problem?
My mongo Schema looks like:
User:{
name:String,
age:Number,
address:[
{
address_line_one:String,
city:String,
phone:[
{
number:String,
verified:Boolean
}
]
}
]
}
Upvotes: 0
Views: 496
Reputation: 3010
We can use array filters to update multilevel arrays.
Let's say, we have the following data in 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
}
]
}
]
}
To update the verification status of phone number "111111111", the following query can be used:
db.collection.update(
{},
{
$set:{
"address.$[addressFilter].phone.$[phoneFilter].verified":true
}
},
{
"arrayFilters":[
{
"addressFilter.phone.number":"111111111",
},
{
"phoneFilter.number":"111111111"
}
],
"multi":true
}
)
Output:
{
"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
}
]
}
]
}
Here we used two array filters: 'addressFilter', and 'phoneFilter'
Please refer https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/ for more information on array filters.
Upvotes: 1