Search code examples
node.jsmongodbnode-mongodb-native

mongodb $pull doesn't work with array in subdocument


I have a problem with an update with MongoDB.

My schema look like this:

Project: {
    _id: ObjectId(pro_id)
    // some data
    dashboard_group: [
        {
            _id: ObjectId(dgr_id)
            dgr_name: "My Dashboard"
            dgr_tasks: [
                id1,
                id2,
                ...
            ]
        },
        // other dashboards
    ]
}

I want to remove id2 but the $pull operator seems not work. Mongo return me this :

result: {
    lastErrorObject: {
        n: 1,
        updatedExisting: true
    },
    ok: 1
}

This is my request:

db.Project.findOneAndUpdate({
    "dashboard_group._id": dgr_id
}, {
    $pull: {
        "dashboard_group.$.dgr_tasks": id2
    }
});

dgr_id is already cast to ObjectId before the query and I verified the value that I want to remove.

Can anyone have an idea ?


Solution

  • You will need to select the particular array element using "$elemMatch" like this

    Query : {"dashboard_group":{"$elemMatch":{dgr_name:"My Dashboard"}}}

    Update : {$pull:{"dashboard_group.$.dgr_tasks":"id2"}}