如何检查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做这件事。
答案 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,因此也请尝试此操作。