春季和Mongodb:MongoTemplate updateMulti修改1个文档

时间:2018-12-05 17:21:06

标签: spring mongodb nested field mongotemplate

我正在尝试使用Spring MongoTemplate here中的 updateMulti(Query query,Update update,ClassentityClass)方法更新多个文档,但是仅更新了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 = 1updateResult.matchedCount = 3

为什么这在春季不起作用?这是错误吗?该查询在mongo shell中运行正常/所有匹配的文档都已更新。

0 个答案:

没有答案