为什么getLastError
表明没有文档更新?
> db.contacts.find()
{ "_id" : ObjectId("509b60e7c546b6dc73f57877"), "name" : "mike" }
> db.contacts.update({}, {name: 'peter'})
> db.runCommand({getLastError: 1})
{ "n" : 0, "connectionId" : 3188, "err" : null, "ok" : 1 }
> db.contacts.find()
{ "_id" : ObjectId("509b60e7c546b6dc73f57877"), "name" : "peter" }
getLastError
正在返回n: 0
,即使文档已明确更新。它也缺少updatedExisting
字段。我在MongoHQ示例数据库上远程运行它。
针对我的本地MongoDB实例运行,getLastError
正确返回:
> db.runCommand({getLastError: 1})
{
"updatedExisting" : true,
"n" : 1,
"connectionId" : 1,
"err" : null,
"ok" : 1
}
答案 0 :(得分:2)
这可能是连接重用的问题,也可能是shell行为。 getLastError(GLE)调用只返回执行GLE调用的连接上发生的最后一次操作的状态。
但是,当您使用shell时,它会在每次写操作后自动调用GLE,因此您通常会得到一个null结果,因为已经调用了GLE。请尝试拨打getPrevError()
- 看看是否会返回您的预期。
MongoDB驱动程序通过确保在将连接返回到池之前调用GLE并将其作为操作的结果(或错误)返回以避免此类问题来处理此问题。