2012-10-23 9 views
6

wierszy Próbuję wykonać aktualizację mongodb dla każdego pola w tablicy rekordów.

Przykładowy schemat znajduje się poniżej:

{ 
    "_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 
     } 
    ] 
} 

Do tej pory byłem w stanie wykonać pojedyncze aktualizacje tak:

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

jednak walczę, jak wykonać aktualizację zaktualizuje wszystkie rekordy tablicy do status_id z 1 (na przykład).

Poniżej jaki mogę sobie wyobrazić to powinno działać:

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

Jednakże pojawia się błąd:

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

próbowałem od dłuższego czasu bez powodzenia. Jakieś wskazówki?

Odpowiedz

6

Nie można dokonać takiej "wieloznacznej" aktualizacji elementów tablicy, której szukasz. Myślę, że najlepsze, co możesz zrobić, to ustawić jednocześnie wartość każdego elementu:

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

OK dziękuję. Chyba po prostu przejdę przez tablicę. – HGPB

Powiązane problemy