MongodbTemplate的增删改操作

来源:互联网 发布:怎么拿到网站数据库 编辑:程序博客网 时间:2024/06/06 04:53

插入数据操作

将参数转换成一个对象,直接调用insert方法即可:
举例:

@Document(collection="student")public class Student {    private String studentId;    private String name;    private int age;    private String sex;    public String getStudentId() {        return studentId;    }    public void setStudentId(String studentId) {        this.studentId = studentId;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }}

首先创建一个javabean,其中的@Document注解是指定该对象和哪个collection对应。

然后我们将要存入的数据封装到这个对象中,并调用mongodbTemplate的insert方法。

public void insert(){    Student student = new Student("1","zhangsan",18,"男");    mongoTemplate.insert(student);}

当然,在开发中复杂的数据结构是比较常见的,例如我们需要存储嵌套文档的时候,如果直接使用javabean是比较麻烦的,这种比较复杂的数据结构,我们只需要拿到json字符串,并将其转换成json对象,即可直接插入到mongodb中。

public void insert(){    String classStr = "{'classId':'1','Students':[{'studentId':'1','name':'zhangsan'}]}";    JSONObject parseObject = JSON.parseObject(classStr);    mongoTemplate.insert(parseObject,"class");}

insert方法有一个缺陷,就是每调用一次,就会插入一条新的数据,但是有很多时候,我们需要如果数据存在,则修改,如果不存在,则插入,这个时候,更新操作是比较常用的。

更新数据操作

更新一条数据,在关系型数据库中,我们需要where条件筛选出需要更新的数据,并且要给定更新的字段及值,在mongodb中也是一样,我们需要给定条件和值:

public void update(){    Query query = new Query();    query.addCriteria(Criteria.where("classId").is("1"));    Update update = Update.update("teacher", "Mr.wang");    mongoTemplate.upsert(query, update, "class");}

在classId为1的数据中修改teacher字段为Mr.wang,如果这条数据中没有teacher字段,则会添加该字段。
mongodbTemplate中还有另外一个更新方法:

mongoTemplate.updateFirest(query, update, "class");mongoTemplate.updateMulti(query, update, "class");

这个两个方法一个是更新满足条件的第一条数据,一个是更新所有满足条件的数据,它们和upsert的区别就是,如果query条件没有筛选出对应的数据,那么upsert会插入一条新的数据,而update则什么都不会做。和关系型数据库中的merge和update的一样。

添加内嵌文档中的数据

Query query = Query.query(Criteria.where("classId").is("1"));Student student = new Student("1", "lisi", 18, "man");Update update = new Update();//update.push("Students", student);update.addToSet("Students", student);mongoTemplate.upsert(query, update, "class");

addToSet如果数据已经存在,则不做任何操作,而push会插入一条一样的数据。

修改内嵌文档中的数据

public void update(){    Query query = Query.query(Criteria.where("classId").is("1")                .and("Students.studentId").is("1"));    Update update = Update.update("Students.$.name", "lisi");    mongoTemplate.upsert(query, update, "class");}

删除内嵌文档中的数据

Query query = Query.query(Criteria.where("classId").is("1")                .and("Students.studentId").is("3"));Update update = new Update();update.unset("Students.$");mongoTemplate.updateFirst(query, update, "class");

这种方法有一个缺陷,会将符合条件的数据修改成null,如果要彻底删除,则需要使用pull(pull删除内嵌文档的时候,student对象的值一定要和被删除的一模一样)

Query query = Query.query(Criteria.where("classId").is("1"));Update update = new Update();Student student = new Student("2","lisi",18,"man");update.pull("Students",student);mongoTemplate.updateFirst(query, update, "class");

删除操作

Query query = Query.query(Criteria.where("classId").is("1"));mongoTemplate.remove(query,"class");

remove操作是直接将所有满足条件的数据给删除,如果只是要删除内嵌文档中的数据,则需要使用上面更新操作。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浪琴手表保修卡掉了怎么办 事故车辆维修和报废怎么办 4.2货车拉缸了怎么办 工作中与同事发生矛盾怎么办 和领导关系闹僵怎么办 内倒窗户卡住了怎么办 支付宝存在安全风险怎么办 地铁车站空调坏了怎么办 面试防汛值班发生灾情你怎么办 怀孕上班路途太远怎么办 硕士错过校招应该怎么办 收银员收多了钱怎么办 商铺贷款批不了怎么办 铁路局的门面乱收房租怎么办 酒店夜审房费多过怎么办 夜审房价录多了怎么办 做工地拿不到钱怎么办 赢了官司拿不到钱怎么办 工地上拿不到钱怎么办 做了工拿不到钱怎么办 高速公路上车没油了怎么办 高铁乘务员年龄大了怎么办 总公司跑路了分公司怎么办 坐车久了耳朵懵怎么办 过完隧道耳朵疼怎么办 护照还在大使馆需要出国怎么办 护照在大使馆不返回怎么办 美国面签迟到了怎么办 成都美签迟到了怎么办 签证电调没人接怎么办 单位没有抬头纸怎么办在职证明 出国签证无银行流水怎么办 铁路职工得癌症后工作怎么办 去泰国不会泰语和英语怎么办 签证状态一直没有更新怎么办 简理财不能身份信息确认怎么办 德国领事馆没有收到预约邮件怎么办 父母一方带孩子英国签证怎么办 去韩国自由行签证怎么办 韩国自由行签证的该怎么办 法院离婚判决书没了怎么办