mongodbTemplate更新或删除子元素为数组的数据

项目中用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);  //执行指定条件的删除

})

完,希望能够帮助到你



  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值