2013-04-16 11 views
12

Sto usando mongotemplate per Spring e mi chiedevo come avrei potuto incrementare un valore di uno dei miei documenti che ho in un array atomicamente. Immaginiamo di avereValore di incremento di Mongodb all'interno dell'array nidificato

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

Quello che vorrei è c incremento da 3 a 4 per il _id 341.445

Sono stato con findAndModify ma io non so come posso fare per un documento nidificato in un array.

Saluti.

+0

Finora l'unica cosa che Ho trovato è determinato l'indice della matrice come b.0.c = 11111 qualche idea migliore? – paul

risposta

23

Per aggiornare un elemento in un campo di matrice, è possibile utilizzare il positional $ operator

Ad esempio, i seguenti js C incrementi da 3 a 4 per _id 341.445:

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

Grazie !, ma ricorda che la tua risposta deve essere estrapolata a Java – paul

+0

Questo non funzionerà quando la query di aggiornamento viene utilizzata con upsert. –

+0

Grazie Grazie Grazie. Ho passato tre ore a provare a farlo funzionare !!! Bella risposta!! –

Problemi correlati