2013-04-16 3 views
12

Я использую mongotemplate для Spring, и мне было интересно, как я могу увеличить значение одного из моих документов, которые у меня есть в массиве атомарно. Представьте себе, что у нас естьMongodb Значение приращения внутри вложенного массива

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

То, что я хотел бы это приращение с от 3 до 4 для _id 341445

Я использую findAndModify, но я не знаю, как я могу сделать это для вложенного документа в массив.

С уважением.

+0

До сих пор единственное, что Я нашел, что детерминирует индекс массива, например b.0.c = 11111, любую лучшую идею? – paul

ответ

23

Для обновления элемента в поле массива, вы можете использовать positional $ operator

Например, следующие JS приращения с от 3 до 4 для _id 341445:

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

Спасибо !, но помните, что ваш ответ должен быть экстраполирован на Java – paul

+0

Это не будет работать, если запрос обновления будет использоваться с upsert. –

+0

Благодарю вас, спасибо. Я тратил три часа на то, чтобы заставить это работать !!! Отличный ответ! –

Смежные вопросы