I have a document---
Employees:[
{
name:"abc",
contact:"123",
email:"[email protected]"
},
{
name:"efg",
contact:"456",
email:"[email protected]"
},
{
name:"hij",
contact:"789",
email:"[email protected]"
}
]
I need to update name with value= "abc" for all the keys name in the list.
I have tried to update like
db.collection.update(
{ "_id" : ObjectId("5308595e3256e758757b4d2f") },
{ "$set": { "Employees.name " : "abc" } }
);
But getting the error: cannot use the part (Employees of Employees.name) to traverse the element.
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.
Update Documents in an ArrayThe positional $ operator facilitates updates to arrays that contain embedded documents. Use the positional $ operator to access the fields in the embedded documents with the dot notation on the $ operator.
The update() method updates the values in the existing document in the collections of MongoDB. When you update your document the value of the _id field remains unchanged.
These are in an array, so that is why your current statement does not work. You have a few options to do this as there is no simple statement to do this.
1. You know how many elements are in the array, so set them explicitly with "dot-notation"
db.collection.update(
{ "_id" : ObjectId("5308595e3256e758757b4d2f") },
{
"$set": {
"Employees.0.name " : "abc",
"Employees.1.name " : "abc",
"Employees.2.name " : "abc"
}
}
);
2. You don't know but are prepared to issue this update until the returned "modified" documents becomes 0. Then you can use a positional $
operator in the update but this will only ever match one element at a time:
db.collection.update(
{
"_id" : ObjectId("5308595e3256e758757b4d2f"),
"Employees.name": { "$ne": "abc" }
},
{
"$set": {
"Employees.$.name " : "abc"
}
}
);
3. Retrieve the document and update all the array members in code:
var doc = db.collection.findOne({
"_id": ObjectId("5308595e3256e758757b4d2f")
});
doc.Employee.forEach(function(emp) {
emp.name = "abc";
});
db.collection.update(
{ "_id": doc._id },
{ "$set": { "Employee": doc.Employeee } }
)
Those are the basic methods and doing this, along with some practical example of why this cannot be presently done in a single statement just updating every array member field.
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