0

我遇到了一个关于 Mongoose 的 deleteOne 方法的问题。

问题如下:

  1. 使用带键的 deleteOne() 删除文档。
  2. 尝试再次使用具有相同键的 deleteOne() 删除相同的文档,然后该方法没有返回任何错误。

我写的代码在这里。

是否有可能以某种方式出错?

如果您能解决这个问题,我将不胜感激。先感谢您。

4

1 回答 1

1

当删除带有键的文档并且它存在时,Mongodb(您使用的 npm mongoose)会使用deleteOne返回以下内容:

{ "acknowledged" : true, "deletedCount" : 1 }

如果您删除已删除的同一个文档,它会返回:

{ "acknowledged" : true, "deletedCount" : 0 }

所以,修改你的代码如下:

await Post.deleteOne({_id: postId}, (err, d) => {
    if (err) return res.status(400)
    if (d.acknowledged && d.deletedCount == 1)
        console.log("Deleted Successfully")    // Use your response code
    else
        console.log("Record doesn't exist or already deleted")    // Use your response code
})

Mongo Shell 输出供参考:

> db.post.deleteOne({"_id" : ObjectId("5e8478d86c193bc19f5e4112")})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.post.deleteOne({"_id" : ObjectId("5e8478d86c193bc19f5e4112")})
{ "acknowledged" : true, "deletedCount" : 0 }
于 2020-06-27T20:50:59.887 回答