MongoDB updating fields in nested array
How can I set "play" to "play photo" in the photos
array?
I only know its _id
.
"_id": ObjectId("4f41a5c7c32810e404000000"),
"albums": [
{
"_id": ObjectId("4f545d1bc328103812000000"),
"name": "album1" ,
"photos":[{
"_id": ObjectId("4f545d1bc328103812d00000"),
"name":"travel photo"
},{
"_id": ObjectId("4f545d1bc328103812c00000"),
"name":"play"
}]
},
{
"_id": ObjectId("4f545f56c328103c12000000"),
"name": "album2"
},
{
"_id": ObjectId("4f545f68c328103012000000"),
"name": "album3"
},
{
"_id": ObjectId("4f546642c328103c12000001"),
"name": "album4"
}]
Update Nested Arrays in Conjunction with $[]The $[<identifier>] filtered positional operator, in conjunction with the $[] all positional operator, can be used to update nested arrays. The following updates the values that are greater than or equal to 8 in the nested grades. questions array if the associated grades.
You can use the updateOne() or updateMany() methods to add, update, or remove array elements based on the specified criteria. It is recommended to use the updateMany() method to update multiple arrays in a collection.
MongoDB syntax for updating an object inside an array within a document? For this, use findOneAndUpdate() in MongoDB. The findOneAndUpdate() method updates a single document based on the filter and sort criteria.
This issue has been resolved. Feature of updating fields inside nested array of objects, is available in MongoDB 3.6+ versions. Look positional operators(all and with identifier) here.
//Update all docs in collection matching photo name "play" to "play photo"
db.collectioname.update(
{},
{ $set: { "albums.$[].photos.$[photo_field].name": "play photo" } },
{ arrayFilters: [ {"photo_field.name": "play"} ], multi: true}
);
//Update this specific doc given in question matching photo name "play" to "play photo"
db.collectioname.update(
{"_id" : ObjectId("4f41a5c7c32810e404000000")},
{ $set: { "albums.$[].photos.$[photo_field].name": "play photo" } },
{ arrayFilters: [ {"photo_field.name": "play"} ]}
);
This is for the help of people coming here after MongoDB 3.6
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With