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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spring数据mongodb更新/替换mongodb中深层嵌套的对象相关的知识,希望对你有一定的参考价值。

我有这样的文件。

{ "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" } ] }] }] }

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

我写的代码是:

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

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

有谁知道如何执行这种查询?

答案

请阅读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);

以上是关于使用spring数据mongodb更新/替换mongodb中深层嵌套的对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 MongoDB 和事务的 Spring 批处理

在实时 mongodb 机器上更新(或替换)整个数据库集合的最佳方法是啥?

spring mongodb updatemulti为啥只更新了一条

Spring Data MongoDB

如何仅更新已更改的属性 - Spring MVC mongoDB

AbstractMongoEventListener 识别更新或添加事件 spring boot mongoDb