Delete object from array by given _id in in Mongoose

crud, mongodb, mongoid, mongoose, node.js

Solution

Quote from SERVER-2016:

The argument to $pull is already applied to each element of the target array, so using $elemMatch is redundant in the update context.

So just execute your query without `$elemMatch`:

User
    .findByIdAndUpdate(req.user._id, {
        $pull: {events: {
            _id: _eventId   //_eventId is string representation of event ID
        }}
    }, function(err) {
        // ...
    });

Problem

In Mongoose model User given document look like this: ``` > db.users.find().pretty() { /* ... */ "events" : [ { "_id" : ObjectId("537bb2faf87f9a552c3219ea"), "message" : "Foo" }, { "_id" : ObjectId("537bb436c3b9a1aa2db71b7c"), "message" : "Bar" }, { "_id" : ObjectId("537bb4ab2cc503e52e24d145"), "message" : "Biz" }, { "_id" : ObjectId("537bb4d02cc503e52e24d146"), "message" : "Pop" } ] ``` } Some function takes event _id as parameter and must delete object responding to this _id from MongoDB. I tried: ``` User .findByIdAndUpdate(req.user._id, { $pull: {events: { $elemMatch: {_id: _eventId} //_eventId is string representation of event ID }} }, function(err) { // ... }); ``` It is not working. What am I doing wrong?

Original source