2012-10-23 6 views
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) 

しかし、私はその更新を実行する方法のように苦労していますすべての配列レコードをstatus_id(たとえば1)に更新します。

can't append to array using string field name [$]

私は運とかなり長い間試してみました:

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

は、しかし、私はエラーを取得:以下

は、私はそれが動作するはず想像する方法です。すべてのポインタ?

答えて

6

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

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

ありがとうございました。私はちょうどその後、配列を横断するだろうと思う。 – HGPB

関連する問題