RayOfHope
RayOfHope

Reputation: 15

How to remove a specific field by given conidtion in mongodb?

I am not being able to remove the specific eventid from the UserSchema. I searched for this and got a method using unset but that is removing the whole user while the push function is not doing anything. Is there any other way to do this?

Current UserSchema

[
  {
    "_id": "56593f3657e27af8245735d7",
    "username": "abc",
    "name": "xyz",
    "__v": 0,
    "favouriteid": [
    {
      "eventid": "5659242639e43bfc2a0836b9",
      "_id": "56593f6b57e27af8245735d8"
    },
    {
      "eventid": "5659244039e43bfc2a0836ba",
      "_id": "56593f8857e27af8245735d9"
    }
    ]
  }
]

What I need-

[
 {
   "_id": "56593f3657e27af8245735d7",
   "username": "abc",
   "name": "xyz",
   "__v": 0,
   "favouriteid": [
   {
    "eventid": "5659242639e43bfc2a0836b9",
    "_id": "56593f6b57e27af8245735d8"
   }
   ]
 }
]

I will be passing eventid and userid But when I am using this code, the user gets deleted itself rather than the required field.

api.post('/removefavourites', function (req, res) {
    // _id: req.body.id;
    User.findById({_id: req.body.userid},
        {$unset:{favouriteid: {eventid: req.body.eventid}}},
        {upsert: true},
        function (err) {
            if(err)
            return err;
            else
            res.json({success: true});
        });
});

Upvotes: 0

Views: 38

Answers (1)

Sarath Nair
Sarath Nair

Reputation: 2868

You can use update method with pull operation as shown below:

api.post('/removefavourites', function (req, res) {
  // _id: req.body.id;
  User.update({_id: req.body.userid},
    {$pull:{favouriteid: {eventid: req.body.eventid}}},
    function (err) {
        if(err)
        return err;
        else
        res.json({success: true});
    });
});

Hope this helps :)

Upvotes: 1

Related Questions