在我的项目中,我使用的是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("56cc3c908f5e6c56e677bd2e")
)
);
Update update = new Update().unset("sections.sectionId");
mongoTemplate.updateMulti(query, update, Offer.class);
查询是找到propper元素但是Update有问题,我不知道删除是什么不起作用。
任何人都能帮我解决这个问题吗?
答案 0 :(得分:4)
因为无论如何我需要练习,这里有一个猜测就像你想要的那样。
Query query = Query.query(Criteria
.where("sections")
.elemMatch(
Criteria.where("sectionId").is("56cc3c908f5e6c56e677bd2e")
)
);
Update update =
new Update().pull("sections",
new BasicDBObject("sectionId", "56cc3c908f5e6c56e677bd2e"));
mongoTemplate.updateMulti(query, update, Offer.class);
导致
"sections" : [
{
"sectionId" : "56cc3cd28f5e6c56e677bd2f",
"name" : "Hello my friends"
}
]
答案 1 :(得分:3)
无需查询
Update update =
new Update().pull("sections",
new BasicDBObject("sectionId", "56cc3c908f5e6c56e677bd2e"));
mongoTemplate.updateMulti(new Query(), update, Offer.class);
该解决方案完美无缺。
答案 2 :(得分:0)
我认为接受的答案不一定适用于 BAsicDbObject 类的所有情况。 Springboot 需要您尝试拉/删除的对象的类才能正确映射它,所以我是这样做的:
var sectionToRemove = new Section()
. sectionId("56cc3c908f5e6c56e677bd2e");
var updateAction = new Update().pull("sections", sectionToRemove);
var res = mongoOps.updateMulti(query, updateAction, Section.class);