获取更新文档的数量 mongo

问题描述 投票:0回答:2

mongo中有没有函数可以返回更新语句中更新的文档数量?

我尝试使用

count()
,但显然更新语句只返回 true 或 false,所以我想我正在获取字符串的计数。

谢谢

mongodb mongoid mongodb-ruby database
2个回答
10
投票

更新

getLastError
在 MongoDB 5.1 中被删除。 文档

任何显式使用 getLastError、db.getLastError() 或 db.getLastErrorObj() 的代码都应该使用 CRUD API 来发出具有所需写入关注的写入。有关写入操作成功或失败的信息将由驱动程序直接作为返回值提供。


使用

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中,第四个参数用于表示我们要更新多个文档。


1
投票

为了将来参考最新版本的 mongoDB,您可以保存更新命令的结果并查找属性

modifiedCount
。请注意,如果更新操作不会导致文档发生任何更改,例如将字段的值设置为其当前值,则它可能会小于查询中匹配的文档数。

例如(JS):

var updateResult = await collection.updateOne( .... )

if(updateResult.modifiedCount < 1)  throw new Error("No docs updated");

响应对象中还有两个字段

result.n
result.nModified
,分别告诉您匹配的文档数和更新的文档数。这是 mongoDB 返回的响应对象的一部分

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

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

© www.soinside.com 2019 - 2024. All rights reserved.