如何在mongodb中通过给定的conidtion删除特定字段?

时间:2015-11-28 05:55:49

标签: node.js mongodb

我无法从UserSchema中删除特定的eventid。我搜索了这个并获得了一个使用unset的方法但是在推送功能没有做任何事情的情况下删除整个用户。有没有其他方法可以做到这一点?

当前UserSchema

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

我需要什么 -

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

我将通过eventid和userid 但是当我使用此代码时,用户会自行删除而不是必填字段。

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});
        });
});

1 个答案:

答案 0 :(得分:1)

您可以将update方法与pull操作一起使用,如下所示:

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});
    });
});

希望这会有所帮助:)