我正在对Mongolab(Heroku)中的数据库运行更新,无法从GetLasterror获取信息。
作为一个例子,下面是更新MongoDB数据库中在我的机器上本地运行的集合的语句(DB版本v2.0.3-rc1)。

ariels-MacBook:mongodb ariel$ mongo
MongoDB shell version: 2.0.3-rc1
connecting to: test
> db.mycoll.insert({'key': '1','data': 'somevalue'});
> db.mycoll.find();
{ "_id" : ObjectId("505bcc5783cdc9e90ffcddd8"), "key" : "1", "data" : "somevalue" }
> db.mycoll.update({'key': '1'},{$set: {'data': 'anothervalue'}});
> db.runCommand('getlasterror');
{
    "updatedExisting" : true,
    "n" : 1,
    "connectionId" : 4,
    "err" : null,
    "ok" : 1
}
>

当地一切都很好。
现在我切换到Mongolab中的数据库并运行相同的语句来更新文档。GetLastError未返回UpdateExisting字段。因此,我无法测试我的更新是否成功。
ariels-MacBook:mongodb ariel$ mongo ds0000000.mongolab.com:00000/heroku_app00000 -u someuser -p somepassword
MongoDB shell version: 2.0.3-rc1
connecting to: ds000000.mongolab.com:00000/heroku_app00000
> db.mycoll.insert({'key': '1','data': 'somevalue'});
> db.mycoll.find();
{ "_id" : ObjectId("505bcf9b2421140a6b8490dd"), "key" : "1", "data" : "somevalue" }
> db.mycoll.update({'key': '1'},{$set: {'data': 'anothervalue'}});
> db.runCommand('getlasterror');
{
    "n" : 0,
    "lastOp" : NumberLong("5790450143685771265"),
    "connectionId" : 1097505,
    "err" : null,
    "ok" : 1
}
> db.mycoll.find();
{ "_id" : ObjectId("505bcf9b2421140a6b8490dd"), "data" : "anothervalue", "key" : "1" }
>

有人碰到这个吗?
如果重要的话,我在Mongodab的资源是运行Mongodv2.0.7(我的shell是2.0.3)。
我不太清楚我错过了什么。
我正在等待他们的支持(我会在收到回信后在这里发帖),但我想和你们这里的好朋友们核实一下,以防万一。
谢谢您。

最佳答案

这看起来是对mongod进程没有管理权限的限制。你可以用10gen提交一张罚单,因为这似乎不是一个必要的限制。
当我在笔记本电脑上以auth模式运行mongo时,我需要在管理数据库中以用户身份进行身份验证,以便看到0以外的“n”或“updatedexisting”字段。当我在任何其他数据库中以用户身份进行身份验证时,我得到的结果与您在Mongolab产品中看到的结果相似。
(完全公开:我为蒙古人工作。另外,我看不到你在我们系统中提到的支持票。如果您愿意,我们很乐意直接与您合作。您可以通过[email protected]http://support.mongolab.com联系我们。)

关于mongodb - MongoLab中没有来自getLastError的updatedExisting,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12523562/

10-11 00:30