猫鼬:计算删除文件

时间:2012-08-17 13:44:23

标签: node.js mongoose

如何检查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”字段将告诉您删除了多少文档。

但我不知道如何用Mongoose做这件事。

3 个答案:

答案 0 :(得分:31)

猫鼬< 4,MongoDB< 3

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

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

Mongoose 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."));
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

我在2020年偶然发现了此结果,并在Mongoose 5.9.28中发现结果不再需要结果包装,因此使用remove在异步方法中获取已删除记录的数量看起来像:

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

当然,不赞成使用collection.remove,而建议使用deleteOne或deleteMany,因此也请尝试此操作。