我正在尝试使用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 = 1
但updateResult.matchedCount = 3
为什么这在春季不起作用?这是错误吗?该查询在mongo shell中运行正常/所有匹配的文档都已更新。