Reputation: 10946
Using native Nodejs driver with MongoDB 2.4 and trying to remove property from documents embedded in array. E.g. how can I remove gym
property from documents embedded in grades
array where gym
is 562e7c1ae6c3e8ce29abfe05
? So from this:
{
"_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
"grades" : [
{
"_id" : ObjectId("562e7bbe70ee82bb290192bd"),
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4c",
"gym" : "562e7c1ae6c3e8ce29abfe06",
"registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"gym" : "562e7c1ae6c3e8ce29abfe05",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
}
],
},
{
"_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
"grades" : [
{
"_id" : ObjectId("562e7bbe70ee82bb290192bd"),
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4c",
"gym" : "562e7c1ae6c3e8ce29abfe07",
"registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"gym" : "562e7c1ae6c3e8ce29abfe05",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
}
],
}
I need this:
{
"_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
"grades" : [
{
"_id" : ObjectId("562e7bbe70ee82bb290192bd"),
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4c",
"gym" : "562e7c1ae6c3e8ce29abfe06",
"registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
}
],
},
{
"_id" : ObjectId("562abaaffb5870b8fb9dca3f"),
"grades" : [
{
"_id" : ObjectId("562e7bbe70ee82bb290192bd"),
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4c",
"gym" : "562e7c1ae6c3e8ce29abfe07",
"registeredOn" : ISODate("2015-10-26T19:15:10.565Z")
},
{
"discipline" : "55aae5b7848b9c8bf4ecbb5c",
"grade" : "55aae5b7848b9c8bf4ecbb4d",
"registeredOn" : ISODate("2015-10-26T19:17:08.603Z"),
"_id" : ObjectId("562e7c34e6c3e8ce29abfe06")
}
],
}
Nothing seems to work and closest I have to what I need is:
collections.users.update({
"grades.gym": {
$exists: true
}
}, {
$unset: {
"grades.$.gym": "562e7c1ae6c3e8ce29abfe05"
}
}, {
multi: true
})
Upvotes: 1
Views: 285
Reputation: 103365
Just point to the embedded document field as your update query:
db.users.update(
{
"grades.gym": "562e7c1ae6c3e8ce29abfe05"
},
{
"$unset": {
"grades.$.gym": "562e7c1ae6c3e8ce29abfe05"
}
}, { "multi": true }
)
Upvotes: 1