1

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
})

1 Answer 1

1

Just point to the embedded document field as your update query:

db.users.update(
    {
        "grades.gym": "562e7c1ae6c3e8ce29abfe05"
    }, 
    {
        "$unset": {
            "grades.$.gym": "562e7c1ae6c3e8ce29abfe05"
        }
    }, { "multi": true }
)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.