Mongoose - 删除更新中的数组元素

时间:2015-04-08 15:03:46

标签: javascript node.js mongodb express mongoose

我有这种格式的JSON:

{
   _id:5522ff94a1863450179abd33,
   userName:'bill',
   __v:3,
   friends:[
      {
         _id:55156119ec0b97ec217d8197,
         firstName:'John',
         lastName:'Doe',
         username:'johnDoe'
      },
      {
         _id:5515ce05207842d412c07e03,
         lastName:'Adam',
         firstName:'Foo',
         username:'adamFoo'
      }
   ]
}

我想删除整个相应的子阵列。例如,我想删除标识为55156119ec0b97ec217d8197的用户John Doe,结果将为:

{
   _id:5522ff94a1863450179abd33,
   userName:'bill',
   __v:3,
   friends:[
      {
         _id:5515ce05207842d412c07e03,
         lastName:'Adam',
         firstName:'Foo',
         username:'adamFoo'
      }
   ]
}

到目前为止,我有这个:

exports.delete = function (req, res) {
    var friends = req.friends[0];

    friends.update(
        {'_id': req.body.friendsId},
        {$pull: {'friends.friends': {_id: req.body.friendId}}}, function (err) {
            if (err) {
                return res.status(400).send({
                    message: getErrorMessage(err)
                });
            } else {
                res.json(friends);
            }
        });
};

但是如果没有结果,而且我没有收到任何错误,它将保持原样。 req.body.friendsId是主数组的ID,req.body.friendId是我要提取的特定用户的ID。

1 个答案:

答案 0 :(得分:1)

将更新查询更改为:

exports.delete = function (req, res) {
    var friends = req.friends[0]; // assuming the friends object is your mongodb collection

    friends.update(
        { '_id': req.body.friendsId },
        { $pull: {'friends': { _id: req.body.friendId } } }, function (err) {
            if (err) {
                return res.status(400).send({
                    message: getErrorMessage(err)
                });
            } else {
                res.json(friends);
            }
        });
};

这将搜索包含friends数组元素_id value = req.body.friendsId的文档,并使用 $pull 运算符从该数组中删除特定数组元素