6

rowsレコードの配列の各フィールドでmongodbの更新を実行しようとしています。

スキーマの例を以下に示します。

{
    "_id" : ObjectId("508710f16dc636ec07000022"),
    "summary" : "",
    "uid" : "ABCDEF",
    "username" : "bigcheese",
    "name" : "Name of this document",
    "status_id" : 0,
    "rows" : [
        {
            "score" : 12,
            "status_id" : 0,
            "uid" : 1
        },
        {
            "score" : 51,
            "status_id" : 0,
            "uid" : 2
        }
    ]
}

これまでのところ、次のような単一の更新を実行できました。

db.mycollection.update({"uid":"ABCDEF","rows.uid":1}, {$set:{"rows.$.status_id":1}},false,false)

ただし、すべてのアレイレコードを1に更新する更新を実行する方法については苦労していstatus_idます(たとえば)。

以下は、それが機能するはずだと私が想像する方法です。

db.mycollection.update({"uid":"ABCDEF"}, {$set:{"rows.$.status_id":1}},false,true)

ただし、エラーが発生します。

文字列フィールド名[$]を使用して配列に追加することはできません

私はかなり長い間運がなかった。ポインタはありますか?

4

1 に答える 1

6

探している配列要素の「ワイルドカード」更新のようなものを実行することはできません。私ができる最善のことは、次のstatus_idように各要素の値を同時に設定することだと思います。

db.mycollection.update(
    {"uid":"ABCDEF"},
    {$set:{
        "rows.0.status_id":1,
        "rows.1.status_id":1
    }}, false, true);
于 2012-10-23T23:07:49.477 に答える