Mongodb + Node.js:删除多个文档并返回

2024-02-05

我使用下面的代码一次删除多个文档:

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

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

NOTE: 我在找multiple删除和multiple return,这与这个问题不同:如何获取 MongoDB 中已删除的文档? https://stackoverflow.com/questions/11607487/how-to-get-removed-document-in-mongodb


很遗憾,deleteMany() http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#deleteMany仅通过error http://mongodb.github.io/node-mongodb-native/2.2/api/MongoError.html and 更新写操作结果 http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#~deleteWriteOpResult到您的回调,因此不会传递任何实际文档。

这不仅仅是 Node.js 的问题——实际上就是这样db.collection.deleteMany https://docs.mongodb.com/v3.2/reference/method/db.collection.deleteMany/在蒙戈工作:

返回:包含以下内容的文档:

  • 如果满足以下条件,则布尔值被确认为 true: 操作运行时存在写关注,如果写关注是则为 false 残疾人

  • deletedCount 包含已删除文档的数量

您必须通过两个请求来完成此操作,但您可以将其抽象为单个函数 - 例如如果你正在使用原生 Mongo 驱动 http://mongodb.github.io/node-mongodb-native/2.2/api/index.html你可以写这样的东西:

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() http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#findAndRemove但它已被弃用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongodb + Node.js:删除多个文档并返回 的相关文章

随机推荐

  • 从左侧隐藏/显示

    我有这个代码可以用来隐藏 显示 我希望 div 在向左移动时隐藏 我怎样才能做到这一点 这就是我的FIDDLE http jsfiddle net dRpWv 306 JavaScript document ready function b
  • 用户未登录时重定向

    我在 App js 中有以下路线
  • ldap3 python修改用过滤器替换对象

    在应用ldapmodify时我们如何进行过滤 例如 这就是我的用户对象的样子 dn email protected cdn cgi l email protection ou users dc dev dc com sn po givenN
  • WP8应用程序中的付款

    我目前正在制作一个 Windows Phone 8 silverlight 应用程序 在应用程序中 我们希望允许用户通过 PayPal 或其他付款方式付款 我还从开发中心查找了应用内付款 但没有在那里看到具有可变值的付款 任何有关使用什么的
  • 如何判断哪些应用程序在 GAC 中注册了给定的程序集?

    当尝试使用 gacutil exe 删除给定程序集 在本例中为 log4net dll 但它应该适用于任何类似情况 时 由于应用程序需要该程序集 操作会失败 但是 我不知道如何判断哪些应用程序实际需要它 由于输出似乎表明该要求已记录在 MS
  • PHP 水印 - Zubrag

    我正在使用 zubrags PHP 水印脚本 附在下面 它的效果很好 除非我尝试使用 PNG 24 作为我的水印 生成的图像带有乱码 不透明的水印 我想知道是否有人可以帮助解释我需要在下面的脚本中更改哪些内容 以便将 PNG 24 作为正确
  • 找不到合适的 SDK 来定位

    我尝试为 UWP 创建项目 但收到此错误 我安装了 Windows 开发工具包并且它有效 谢谢
  • 使用 $http 访问原始 XHR 对象

    我需要访问原始数据XMLHttpRequest对象在支持它的浏览器上添加文件上传进度回调 这是可能的 还是我必须自己构建原始请求 如果是这样 我该如何包装生的XMLHttpRequest在承诺对象中 我模拟了 http调用构建自定义XMLH
  • 为什么迭代器方法不能采用“ref”或“out”参数?

    我今天早些时候尝试过这个 public interface IFoo IEnumerable
  • 容器内可滚动的 div

    我有以下 HTML http jsfiddle net fMs67 http jsfiddle net fMs67 我想让 div2 尊重 div1 的大小并滚动 div3 的内容 这可能吗 Thanks 更新1 这是我在提出问题时过于简单
  • JAR 文件:找不到主类

    好吧 我有一个奇怪的问题 我想将我的程序之一作为 jar 文件运行 但是当我双击打开它时 我收到一条错误消息 例如 找不到主类 程序正在关闭 我很确定我做的一切都是正确的 罐子应该可以工作 我也尝试过其他程序 每个程序都是一样的 我通过 B
  • printf 与 std::cout [重复]

    这个问题在这里已经有答案了 可能的重复 我应该在 C 代码中使用 printf 吗 https stackoverflow com questions 2017489 should i use printf in my c code 如果我
  • 如何在一张表中创建多个序列?

    我有一张 收据 表 我有列 customer id 谁有收据 和收据号 对于每个客户 receipt number 应从 1 开始 并且是一个序列 这意味着 customer id 和receipt number 将是唯一的 我怎样才能优雅
  • VIM 自定义箭头键映射不适用于窗口切换?

    我一直在尝试创建一个在 vim 中打开的窗口拆分之间切换的快捷方式 而不是必须使用 ctrl w arrowkey 我更愿意只能够使用 ctrl arrow key 这是我当前的 vimrc 中的内容 map
  • 如何实现hbase安全批量加载

    我已经在 kerberos 集群中的 hbase 中创建了一个批量加载 其驱动程序类与此类似 工作 public static void main String args try int response ToolRunner run HB
  • PHP 传递一个类作为引用?

    在Python中 你可以这样做 class SomeClass object pass s SomeClass someClassInstance s 如何在 PHP 中实现同样的效果 据我了解 你不能这样做吗 这是真的 您可以创建动态类名
  • 向 Pandas Dataframe 中的字符串添加前导零

    我有一个 pandas 数据框 其中前 3 列是字符串 ID text1 text 2 0 2345656 blah blah 1 3456 blah blah 2 541304 blah blah 3 201306 hi blah 4 1
  • 除非填写所有文本输入字段,否则禁用表单按钮

    我有一个具有多个文本输入的表单 我不想为每个输入添加 id 因为它们是从服务器端代码生成的 字段数量可能不同等 我只是希望能够禁用提交按钮 直到出现是输入到每个文本输入中的文本 我已经做到了这一点 但仅在文本输入到一个文本输入字段之前禁用按
  • 如何使用 boost bcp?

    我有 bcp 工具 它是用 boost 安装程序预先构建的 我想将 boost 所需的依赖项提取到一个较小的文件中 因为我希望能够在学校构建这个项目 我正在尝试使用 bcp 但我不明白如何使用它 尽管有以下说明 http www boost
  • Mongodb + Node.js:删除多个文档并返回

    我使用下面的代码一次删除多个文档 db collection testcollection deleteMany id in 1 2 3 function error response 有没有办法一次性删除并返回所有已删除的文档 NOTE