使用spring数据mongodb更新/替换mongodb中深层嵌套的对象

时间:2017-12-07 16:35:57

标签: arrays mongodb spring-data spring-data-mongodb mongotemplate

我有这样的文件。

{ "id": "5a212b985735dd44089e4782", "people": [{ "personId": "5a212b985735dd44089e4783", "name": "Ronaldo", "parents": [{ "parentId": "5a212b985735dd44089e4784", "name": "Messi", "address": [{ "addressId": "5a212b985735dd44089e4785", "country": "Argentina", "city": "Blah Blah" }, { "addressId": "5a212b985735dd44089e4786", "country": "USA", "city": "New York" } ] }] }] }

我必须使用新的对象替换数组中的现有对象。

我写的代码是:

Query query = new Query(Criteria.where("id").is("5a212b985735dd44089e4782")); Update update = new Update().push("people.$.parents", parent); this.mongoTemplate.findAndModify(query, update, PeopleInfo.class);

但是,它不是替换现有的对象,而是创建一个新对象。

有谁知道如何执行此类查询?

1 个答案:

答案 0 :(得分:0)

请阅读push here的文档。在这种情况下,您应该做的是set而不是push

Query query = new Query(Criteria.where("id").is("5a212b985735dd44089e4782"));
Update update = new Update().set("people.parents", parent);
this.mongoTemplate.findAndModify(query, update, PeopleInfo.class);