1. 程式人生 > >spring data mongodb更新或刪除子元素為陣列的資料

spring data mongodb更新或刪除子元素為陣列的資料

專案中用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 db.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 db.updateFirst(query, update, ViewTemplate.class);