Я пытаюсь обновить несколько документов с помощью метода updateMulti (запрос запроса, обновление обновления, Class entityClass) в Spring MongoTemplate здесь , но обновляется только 1 документ.
Все документы MongoDB выглядят так ...
{ '_id': '1',
'name': 'bread', 'servings': 1,
'recipe': [ {'name':'flour', 'quantity':4, 'units':'cups'},
{'name':'butter', 'quantity':1, 'units':'cups'},
{'name':'milk', 'quantity':2, 'units':'cups'} ] }
Кажется, что выгода в том, что updateMulti работает, если я пытаюсь обновить поле верхнего уровня в документе.Например, если я хочу обновить «порции» во всех рецептах с именем «хлеб» ...
Update update = new Update()
UpdateResult updateResult = mongoTemplate.updateMulti(
query(where('name').is('bread')),
update.set('servings', 2),
MyObject
)
Это работает, updateResult.modifiedCount == updateResult.matchedCount
, и все документы с именем «хлеб» обновляются, чтобы иметь порции2. Но это не сработает, если я попытаюсь обновить поле в массиве объектов , то есть изменить «единицы» на «фунты» в массиве ингредиентов «рецепт» ...
Update update = new Update()
UpdateResult updateResult = mongoTemplate.updateMulti(
query(where('name').is('bread')),
update.set('recipe.$.units', 'pounds'),
MyObject
)
Вместо этого он обновляет только 1 из документов, а не все другие документы, которым он соответствует.updateResult.modifiedCount = 1
но updateResult.matchedCount = 3
Почему это не работает весной?Это ошибка?Запрос отлично работает в оболочке mongo / обновляются все соответствующие документы.