Mongoose如何“删除”不存在的文档?

9

代码:

function deleteItem(req, res) {
    Goods.findByIdAndRemove(req.params.id, (err) => {
    if (err) {
      res.send({
        success: false,
        error: err
      });
    } else {
      res.send({
        success: true,
        item: req.params.id
      });
    }
  })
}

如果我传递一个刚刚删除的文档的_id - Mongoose会成功"删除"它。
如果我传递一个从未存在过的文档的_id,比如591dad9a1583ea0d1065d633 - 它也会"删除"它。
只有当传递类似于a34pnv530eargdzbs这样的垃圾时才会引发错误。
请问有人能告诉我发生了什么呢? :)
1个回答

12

如果您查看相关的Mongoose文档,您会找到背后的原因:

查找匹配的文档,删除它,并将找到的文档(如果有)传递给回调函数。 http://mongoosejs.com/docs/api.html#model_Model.findByIdAndRemove

如果您的数据库中不存在该文档,则Mongoose不会抛出错误。 您应检查回调函数的第二个参数:

Goods.findByIdAndRemove(req.params.id, function(err, doc) {
  if(err || !doc) {
    // Show an error page
  }
});

我想你的意思是 if(err || !doc),对吗? - Javid Jamae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接