Spring и Mongodb: MongoTemplate updateMulti изменяет 1 документ - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь обновить несколько документов с помощью метода 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 / обновляются все соответствующие документы.

...