2

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 が 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 を実行しています (私のシェルは 2.0.3 です)。何が欠けているのか正確にはわかりません。私は彼らのサポートからの連絡を待っています (返信があり次第、ここに投稿します)。ありがとうございました。

4

1 に答える 1

1

これは、mongodプロセスに対する管理者権限を持たないことの制限のようです。必要な制限ではないように思われるので、10genでチケットを提出することができます。

ラップトップでMongoを認証モードで実行する場合、0以外の「n」または「updatedExisting」フィールドを表示するには、adminデータベースでユーザーとして認証する必要があります。他のデータベースでユーザーとして認証すると、MongoLab本番環境で表示されているものと同様の結果が得られます。

(完全開示:私はMongoLabで働いています。ちなみに、私たちのシステムにあなたが言及したサポートチケットは表示されません。ご希望の場合は直接ご連絡させていただきます。サポートでお問い合わせください。 @ mongolab.comまたはhttp://support.mongolab.com

于 2012-09-21T03:15:48.443 に答える