在我的项目中,我使用的是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"
}
但上面是对象{}我想要一个数组[],我不希望它删除其他元素。
任何正文都可以帮我解决如何使用Spring更新sectionId 56cc3c908f5e6c56e677bd2e的记录名称
答案 0 :(得分:9)
您基本上想要复制此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
);
答案 1 :(得分:0)
可以使用 BulkOperations 方法来更新文档对象的列表或数组
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkMode.UNORDERED, Person.class);
for(Person person : personList) {
Query query = new Query().addCriteria(new Criteria("id").is(person.getId()));
Update update = new Update().set("address", person.setAddress("new Address"));
bulkOps.updateOne(query, update);
}
BulkWriteResult results = bulkOps.execute();