项目中用spring data mongodb,当一个类中有一个list集合(即数组元素)时,删除和修改这个元素的数据困扰了我好久,各种百度都搜不到(真心觉得百度很垃圾),后来在谷歌搜到了答案,记录如下:
实体类如下:
package com.weixinplatform.wxwebserver.collection.template;
import java.util.List;
import java.util.Set;
/**
* Created by jihb on 15/5/6.
*/
public class ViewTemplate {
private String id;
private String name;//模本名称
private String desc;//描述
private String type;//模本类型
//模板界面
List<Template> template;
public static class Template{
private String id;
private String view;//视图名称
private String image;//图片路径
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getView() {
return view;
}
public void setView(String view) {
this.view = view;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<Template> getTemplate() {
return template;
}
public void setTemplate(List<Template> template) {
this.template = template;
}
}
mongodb数据库中的数据如下:
{
"_id": ObjectId("5550622dfc194b340a1feb5f"),
"name": "hsaflkjhdf",
"desc": "dfsafsdafsafad",
"type": "微企模板",
"template": [
{
"_id": ObjectId("5550d3280a706d025d8eb5d6"),
"view": "aaaaaaaaaaa",
"image": "http://127.0.0.1:7012/staticdata/newsdata/template/images/redare/5550622dfc194b340a1feb5f/143136029221214278739681.jpg"
}
]
}
删除template子元素中的一条记录:
Update update = new Update();
update.pull("template",new BasicDBObject("id",templateId));
Query query = Query.query(Criteria.where("id").is(viewTemplateId));
return mongodbTemplate.updateFirst(query,update,ViewTemplate.class);
修改template子元素的某一条满足条件的记录:
Update update =new Update();
update.set("template.$.view", view);
update.set("template.$.image", imagePath);
Query query = Query.query(new Criteria().andOperator(Criteria.where("id").is(viewTemplateId),Criteria.where("template").elemMatch(Criteria.where("id").is(templateId))));
return mongoTemplate.updateFirst(query, update, ViewTemplate.class);
删除MongoDB数组的某一条
Query query =new Query(Criteria.where("uuid").is(uuid));
//若多个查询条件 可以拼接 .addCriteria()
ProjectNotice notice=mongoTemplate.findOne(query,ProjectNotice.class); //表字段映射类
notice.getNotice().forEach(t->{ //对应数组
Update update=new Update();
update.pull("notice",t); //t对应的是集合的实体
mongoTemplate.updateFirst(query,update,ProjectNotice.class); //执行指定条件的删除
})
完,希望能够帮助到你