2

我正在对 MongoLab (Heroku) 中的数据库运行更新,无法从 getLastError 获取信息。

例如,以下是更新在我的机器上本地运行的 MongoDB 数据库中的集合的语句(数据库版本 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 未返回 updatedExisting 字段。因此,我无法测试我的更新是否成功。

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" }
>

有人遇到过这个吗?如果重要的话,我在 MongoLab 的资源正在运行 mongod v2.0.7(我的 shell 是 2.0.3)。不完全确定我错过了什么。我正在等待他们的支持(当我收到回复时我会在这里发帖),但也想在这里与你们联系,以防万一。谢谢你。

4

1 回答 1

1

这似乎是对 mongod 进程没有管理员权限的限制。您可以使用 10gen 提交票证,因为这似乎不是必要的限制。

当我在笔记本电脑上以身份验证模式运行 Mongo 时,我需要在 admin 数据库中以用户身份进行身份验证,以便查看除 0 或“updatedExisting”字段之外的“n”。当我在任何其他数据库中以用户身份进行身份验证时,我得到的结果与您在 MongoLab 生产中看到的结果相似。

(全面披露:我为 MongoLab 工作。作为旁注,我没有在我们的系统中看到您提到的支持票。如果您愿意,我们很乐意直接与您合作。您可以通过支持联系我们@mongolab.com 或http://support.mongolab.com

于 2012-09-21T03:15:48.443 回答