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

Mongoose - remove array element in update

本文关键字:删除 数组元素 更新 Mongoose-      更新时间:2023-09-26

我有一个格式为的JSON

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

我想删除整个相应的子数组。例如,我想删除ID为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。

将更新查询更改为:

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

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