我正在使用以下代码一次删除多个文档:
db.collection('testcollection').deleteMany({
id: {
$in: ['1', '2', '3']
}
}, function (error, response) {
// ...
});
有没有办法一次性删除并返回所有被删除的文档?
注意:我正在寻找多个删除和多个返回,这与这个问题不同: How to get removed document in MongoDB?
最佳答案
不幸的是,deleteMany()
仅传递 error和 deleteWriteOpResult到你的回调,所以没有实际的文件被传递。
这不仅仅是 Node.js - 这实际上是 db.collection.deleteMany
在 Mongo 中工作:
Returns: A document containing:
A boolean acknowledged as true if the operation ran with write concern or false if write concern was disabled
deletedCount containing the number of deleted documents
你必须用两个请求来完成它,但你可以在一个函数中将它抽象出来 - 例如如果你使用 native Mongo driver你可以这样写:
function getAndDelete(collectionName, filter, callback) {
var collection = db.collection(collectionName);
collection.find(filter, function (err, data) {
if (err) {
callback(err);
} else {
collection.deleteMany(filter, function (err, r) {
if (err) {
callback(err);
} else {
callback(null, data);
}
});
}
});
}
你可以调用:
getAndDelete('testcollection', {
id: {
$in: ['1', '2', '3']
}
}, function (error, response) {
// ...
});
此代码未经测试,只是为了让您了解从哪里开始。
注意:以前有findAndRemove()
但它已被弃用。
关于node.js - MongoDB + Node.js : delete multiple documents and return them,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844214/