Reputation: 161
How to update a values in the nested array my code like below:-
{
"cats" : [
{
"catId" : "1",
"catname" : "elect",
"displayname" : "Elect",
"subcat" : [
{
"subcatname" : "lap",
"subcatId" : "1",
"displayname" : "Laptops"
},
{
"subcatname" : "cam",
"subcatId" : "2",
"displayname" : "Camera"
}
]
},
{
"catId" : "2",
"catname" : "auto",
"displayname" : "Auto",
"subcat" : [
{
"subcatname" : "car",
"subcatId" : "1",
"displayname" : "Car"
},
{
"subcatname" : "byk", // i want MoterCycle here
"subcatId" : "2",
"displayname" : "Byke"
}
]
}
]
}
I want to update a value of subcatname byk to MoterCycle How to write a query for mycode Best Regards GSY
Upvotes: 0
Views: 255
Reputation: 12051
Use the positional operator. Reference.
Your query:
db.cats.update(
{"catId":"2", "subcat.subcatId" : "2"},
{$set: {"subcat.$.subcatname": "MotorCycle"}}
)
EDIT: It IS working. Here is my test:
> db.cats.find();
{ "_id" : ObjectId("52a15c7631282cd86d9fc1ef"), "catId" : "1", "catname" : "elect", "displayname" : "Elect", "subcat" : [ { "subcatname" : "lap", "subcatId" : "1", "displayname" : "Laptops" }, { "subcatname" : "cam", "subcatId" : "2", "displayname" : "Camera" } ] }
{ "_id" : ObjectId("52a15c7931282cd86d9fc1f0"), "catId" : "2", "catname" : "auto", "displayname" : "Auto", "subcat" : [ { "subcatname" : "car", "subcatId" : "1", "displayname" : "Car" }, { "subcatname" : "byk", "subcatId" : "2", "displayname" : "Byke" } ] }
> db.cats.update(
... {"catId":"2", "subcat.subcatId" : "2"},
... {$set: {"subcat.$.subcatname": "MotorCycle"}}
... )
> db.cats.find();
{ "_id" : ObjectId("52a15c7631282cd86d9fc1ef"), "catId" : "1", "catname" : "elect", "displayname" : "Elect", "subcat" : [ { "subcatname" : "lap", "subcatId" : "1", "displayname" : "Laptops" }, { "subcatname" : "cam", "subcatId" : "2", "displayname" : "Camera" } ] }
{ "_id" : ObjectId("52a15c7931282cd86d9fc1f0"), "catId" : "2", "catname" : "auto", "displayname" : "Auto", "subcat" : [ { "subcatname" : "car", "subcatId" : "1", "displayname" : "Car" }, { "displayname" : "Byke", "subcatId" : "2", "subcatname" : "MotorCycle" } ] }
>
Upvotes: 3