2012-10-23 1 views
6

행 레코드 배열의 각 필드에 대해 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

찾고있는 배열 요소의 일종의 '와일드 카드'업데이트를 수행 할 수 없습니다.

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

확인 감사 : 나는 당신이 할 수있는 최선을 동시에 같이 각 요소의 status_id 값을 설정 생각합니다. 나는 배열을 순회 할 것입니다. – HGPB