0

私が間違っていることを教えてもらえますか?

私は次の文書を持っています

{
        "_id" : ObjectId("5013df3e4a4314271d002476"),
        "bgtiled" : NumberLong(1),
        "post_count" : NumberLong(0),
        "url" : "fb_test",
        "url_lower" : "fb_test",
        "user_id" : NumberLong(4044217),
        "verified" : NumberLong(0)
}

インクリメントしたいpost_countドキュメントによると、私はこれを行います

db.users.update({user_id : 4044217}, {$inc : {post_count : 1}});

フィールドはインクリメントされません。私もこれを試しました

db.users.update({user_id : 4044217}, {$inc : {"post_count" : 1}});

この

db.users.update({user_id : 4044217}, {"$inc" : {"post_count" : 1}});

結果なし:(

4

2 に答える 2

1

シェルでこれを行っている場合、何が起こっているかを知る1つの方法はgetLastError()、この更新で返された呼び出しを確認することです。

シェルはすべてのエントリでgetLastError()を自動的に呼び出すため、次の2つの方法のいずれかで実行できます。

> db.users.update({user_id : 4044217}, {$inc : {post_count : 1}})
> db.getPrevError()
{ "err" : null, "updatedExisting" : true, "n" : 1, "nPrev" : 8, "ok" : 1 }

または、シェルがGLEを呼び出す前に、エラーを取得することもできます。

> db.users.update({user_id : 4044217}, {$inc : {post_count : 1}}); db.getLastErrorObj();
{
    "updatedExisting" : false,
    "n" : 0,
    "connectionId" : 2,
    "err" : null,
    "ok" : 1
}

注:2番目の例では、GLE呼び出しは更新と同じ行にある必要があります。

あなたの場合、1つの既存のドキュメントが更新されたという情報を取り戻したように見えます。そのため、次の方法で更新ステートメントのfind句を確認するように求められた可能性があります。

> db.users.find( {user_id : 4044217} )

複数のドキュメントが返されます。

于 2012-12-16T03:42:01.063 に答える
0

クエリに一致する複数のドキュメントがあり、1つだけが更新されたことが判明しました。

ごめん。

于 2012-12-16T00:45:44.293 に答える