简体   繁体   中英

How to remove property from document embedded in array using MongoDB?

Using native Nodejs driver with MongoDB 2.4 and trying to remove property from documents embedded in array. Eg 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
})

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

db.users.update(
    {
        "grades.gym": "562e7c1ae6c3e8ce29abfe05"
    }, 
    {
        "$unset": {
            "grades.$.gym": "562e7c1ae6c3e8ce29abfe05"
        }
    }, { "multi": true }
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM