node.js - MongoDB + Node.js : delete multiple documents and return them

标签 node.js mongodb

我正在使用以下代码一次删除多个文档:

db.collection('testcollection').deleteMany({
    id: {
        $in: ['1', '2', '3']
    }
}, function (error, response) {
    // ...
});

有没有办法一次性删除并返回所有被删除的文档?

注意:我正在寻找多个删除和多个返回,这与这个问题不同: How to get removed document in MongoDB?

最佳答案

不幸的是,deleteMany()仅传递 errordeleteWriteOpResult到你的回调,所以没有实际的文件被传递。

这不仅仅是 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/

相关文章:

java - 如何比较 Spring mongo 中的日期

node.js - Node 包 'node-fetch' 语法错误 : Unexpected identifier

node.js - 使用 VSCode 调试 Docker 容器中的 Typescript 文件

mongodb 使用查询进行聚合查找

python mongodb $match 和 $group

Python CSV 到 JSON 解析器在输出中添加引号

android - 在 React Native 应用程序中实现指纹登录

javascript - 未找到命令 eslint --init,为什么?

node.js - 在 Node.js 中每 4 小时安排一次任务

android - 我可以通过 native java.net.Socket 连接 Android 客户端与使用 socket.io 的 Node js 服务器吗?