【问题标题】:get number of updated documents mongo获取更新文档的数量 mongo
【发布时间】:2011-11-15 20:12:55
【问题描述】:

mongo 中是否有返回更新语句中更新的文档数的函数?

我曾尝试使用count(),但显然更新语句只返回真或假,所以我想我得到了一个字符串的计数。

谢谢

【问题讨论】:

    标签: mongodb mongoid mongodb-ruby database


    【解决方案1】:

    使用getLastError 命令获取有关操作结果的信息。

    我不知道 ruby​​ 驱动程序,但大多数驱动程序会在“安全模式”下自动执行此操作。在安全模式下,每次写入都会检查getLastError 的结果以确保写入成功。更新操作应该返回一个看起来像 JSON 对象的对象,它包括更新文档的数量 (n)。您可以微调安全模式设置,但请注意默认模式是“即发即弃”,因此安全模式对于许多用例来说都是一个好主意。

    在外壳中,

    > db.customers.update({}, {$set : {"Test" : "13232"}}, true, true);
    > db.runCommand( "getlasterror" )
    {
        "updatedExisting" : true,
        "n" : 3,
        "connectionId" : 18,
        "err" : null,
        "ok" : 1
    }
    

    在这里,我更新了n = 3 文档。请注意,默认情况下,mongodb 中的更新操作仅适用于第一个匹配的文档。在shell中,第四个参数用来表示我们要更新多个文档。

    【讨论】:

      【解决方案2】:

      为了将来参考最新版本的 mongoDB,您可以保存更新命令的结果并查找属性modifiedCount。请注意,如果更新操作导致文档没有变化,例如将字段的值设置为其当前值,则可能小于查询中匹配的文档数。

      例如(在 JS 中):

      var updateResult = await collection.updateOne( .... )
      
      if(updateResult.modifiedCount < 1)  throw new Error("No docs updated");
      

      响应对象中还有两个字段result.nresult.nModified,分别告诉您匹配的文档数量和更新的数量。这是 mongoDB 返回的响应对象的一部分

      result: {
          n: 1,
          nModified: 1,
          ...
        },
      ...
      modifiedCount: 1
      

      更多信息在这里:https://docs.mongodb.com/manual/reference/command/update/

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 2019-08-02
        • 2015-11-18
        • 2018-06-19
        • 1970-01-01
        相关资源
        最近更新 更多