2013-04-16 10 views
12

Używam mongotemplate na wiosnę, i zastanawiałem się, jak mogę zwiększyć wartość jednego z moich dokumentów, które mam w tablicy atomowo. Wyobraźmy sobie, że mamyMongodb Wartość przyrostu wewnątrz zagnieżdżonej tablicy

{'a':1, 
    b:[{_id:341432, 
     c:2 
     }, 
     {_id:341445, 
     c:3 
     }]}; 

Chciałbym to przyrost c od 3 do 4 dla _id 341445

Używam findAndModify ale nie wiem, jak mogę to zrobić za pomocą zagnieżdżonych dokumentu w szyk.

Pozdrawiam.

+0

Dotychczas jedyną rzeczą, że Znalazłem deterministyczny indeks tablicy jak b.0.c = 11111 jakikolwiek lepszy pomysł? – paul

Odpowiedz

23

Aby zaktualizować element w polu tablicy, można użyć positional $ operator

Na przykład, następujące js skoki c od 3 do 4 dla _id 341445:

db.collection.update({a:1, "b._id":341445} , {$inc:{"b.$.c":1}}) 
+5

Dzięki !, ale pamiętaj, że twoja odpowiedź musi zostać ekstrapolowana na Javę – paul

+0

To nie zadziała, gdy zapytanie aktualizacji zostanie użyte z upsert. –

+0

Dziękuję Dziękuję. Spędziłem trzy + godziny próbując zmusić to do pracy !!! Świetna odpowiedź!! –

Powiązane problemy