Search code examples
node.jsmongodbmongoose

Mongoose deleting (pull) a document within an array, does not work with ObjectID


I have the following mongoose schema:

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

I would like to delete the second item in the connections array, to get the following:

user = {
    "userId" : "myId",
    "connections": 
    [{
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

The following code does the job as expected:

userAccounts.update(
    { 'connections.isActive': false }, 
    { $pull: { 'connections.isActive':false }}, 
    function (err, val) {
        console.log(val)
    }
);

But, I need to delete based on ObjectId. And the following goes does not work:

userAccounts.update(
    { 'connections._id': '1234-someId-6789' }, 
    { $pull: { 'connections._id': '1234-someId-6789' } },
    function (err, val) {
        console.log(val)
    }
);

Any suggestions? I have been banging my head against the screen (aka Google, Stackoverflow, ...) for hours and have had no luck.


Solution

  • It seems that the above code would not work. It should not even have worked for the first example I gave.

    In the end I was supported by this answer here: MongoDB, remove object from array

    Here is my working code:

    userAccounts.update( 
        { userId: usr.userId },
        {
            $pull: {
                connections: { _id : connId }
            }
        },
        { safe: true },
        function removeConnectionsCB(err, obj) {
            // ...
        }
    );