12

如何检查 Mongoose 模型的 remove-method 是否真的删除了某些东西?

MyModel.remove({_id: myId}, function(err, entry) {
  if(entry == null) next(new Error("ID was not found."));    // this doesn't work
}

我可以查看删除了多少文件吗?

Mongo-Documentation kristina1 中写下评论:

如果您在删除后调用 db.runCommand({getLastError:1}) 并且“n”字段将告诉您删除了多少文档。

但我不知道如何用猫鼬做到这一点。

4

3 回答 3

32

猫鼬 < 4,MongoDB < 3

回调的第二个参数remove是一个包含删除文档数量的数字。

MyModel.remove({_id: myId}, function(err, numberRemoved) {
  if(numberRemoved === 0) next(new Error("ID was not found."));
}

猫鼬 4.x、MongoDB 3.x

传递给remove回调的第二个参数现在是一个对象,其result.n字段指示已删除文档的计数:

MyModel.remove({_id: myId}, function(err, obj) {
  if(obj.result.n === 0) next(new Error("ID was not found."));
}
于 2012-08-17T14:00:39.273 回答
2

我用最新版本的猫鼬试过这个,但没有用。由于第二个参数作为运算结果返回,而不仅仅是计数。如下使用,它起作用了:

 Model.remove({
            myId: req.myId
        }, function(err, removeResult) {
            if (err) {
                console.log(err);
            }
            if (removeResult.result.n == 0) {
                console.log("Record not found");
            }
            Console.log("Deleted successfully.");
        });
于 2015-09-17T00:41:43.453 回答
0

我在 2020 年偶然发现了这一点,并在 Mongoose 5.9.28 中发现结果不再需要结果包装器,因此使用 remove 在异步方法中获取已删除记录的计数如下所示:

async function remove(query) {
  const result = await ItemModel.remove(query);
  return result.n;
}

当然,collection.remove 不赞成使用 deleteOne 或 deleteMany,所以也试试这个。

于 2020-08-11T00:28:06.387 回答