gpt4 book ai didi

spring - MongoDB 如何使用 Spring Query Update 更新数组中的元素

转载 作者:可可西里 更新时间:2023-11-01 09:20:13 25 4
gpt4 key购买 nike

在我的项目中,我使用的是 SpringBoot 1.3.2 和 org.springframework.data.mongodb.core.query.*

我正在尝试更新数组中的元素,在我的主要对象中我有如下所示的数组:

"sections" : [
{
"sectionId" : "56cc3c908f5e6c56e677bd2e",
"name" : "Wellcome"
},
{
"sectionId" : "56cc3cd28f5e6c56e677bd2f",
"name" : "Hello my friends"
}
]

使用 Spring 我想用 sectionId 56cc3c908f5e6c56e677bd2e 更新记录的名称

我一直在尝试这样,但是没有用

  Query query = Query.query(Criteria
.where("sections")
.elemMatch(
Criteria.where("sectionId").is(editedSection.getId())
)
);
Update update = new Update().set("sections", new BasicDBObject("sectionId", "56cc3c908f5e6c56e677bd2e").append("name","Hi there"));
mongoTemplate.updateMulti(query, update, Offer.class);

它创建类似的东西:

"sections" : {
"sectionId" : "56cc3c908f5e6c56e677bd2e",
"name" : "Hi there"
}

但是上面这个是 object { } 我想要一个数组 [ ],我不希望它删除其他元素。

任何人都可以帮助我如何使用 Spring 更新 sectionId 为 56cc3c908f5e6c56e677bd2e 的记录名称

最佳答案

您基本上想要复制这个 mongo shell 更新操作:

db.collection.update(
{ "sections.sectionId": "56cc3c908f5e6c56e677bd2e" },
{
"$set": { "sections.$.name": "Hi there" }
},
{ "multi": true }
)

等效的 Spring Data MongoDB 代码如下:

import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query;
import static org.springframework.data.mongodb.core.query.Update;

...

WriteResult wr = mongoTemplate.updateMulti(
new Query(where("sections.sectionId").is("56cc3c908f5e6c56e677bd2e")),
new Update().set("sections.$.name", "Hi there"),
Collection.class
);

关于spring - MongoDB 如何使用 Spring Query Update 更新数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com