mongo 中是否有一个函数可以返回在更新语句中更新的文档数?
我曾尝试使用count()
,但显然更新语句只返回真或假,所以我想我得到了一个字符串的计数。
谢谢
mongo 中是否有一个函数可以返回在更新语句中更新的文档数?
我曾尝试使用count()
,但显然更新语句只返回真或假,所以我想我得到了一个字符串的计数。
谢谢
使用该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 中,第四个参数用于表示我们要更新多个文档。
为了将来参考最新版本的 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/