MongodbTemplate的增删改操作

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 插入数据操作将参数转换成一个对象,直接调用insert方法即可: 举例:@Document(collection="student")public class Student { private String studentId; private ...

插入数据操作

将参数转换成一个对象,直接调用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操作是直接将所有满足条件的数据给删除,如果只是要删除内嵌文档中的数据,则需要使用上面更新操作。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
7月前
CRUD操作
CRUD操作
26 0
|
8月前
|
Java 数据库连接 数据库
sqlSessionc操作数据库增删改无效问题
sqlSessionc操作数据库增删改无效问题
40 0
|
8月前
|
数据库 C++
QxOrm的使用-数据操作--增删改查
上一篇我们讲了QxOrm的基本的数据映射操作,这里面再补充一点东西
450 0
|
数据库 数据安全/隐私保护
批量插入【对新数据进行插入操作,已存在的记录进行更新操作】
批量插入【对新数据进行插入操作,已存在的记录进行更新操作】
124 0
批量插入【对新数据进行插入操作,已存在的记录进行更新操作】
|
开发者 Python
字典的增删改操作|学习笔记
快速学习字典的增删改操作
62 0
C#编程-90:Hashtale相关操作
C#编程-90:Hashtale相关操作
|
SQL 存储 关系型数据库
MySQL数据库基本操作-DML——插入数据;删除数据;更新数据
MySQL数据库基本操作-DML——插入数据;删除数据;更新数据
247 0
MySQL数据库基本操作-DML——插入数据;删除数据;更新数据
|
SQL 关系型数据库 MySQL
MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
1965 0
|
SQL 关系型数据库 MySQL
mysql加强(5)~DML 增删改操作和 DQL 查询操作
mysql加强(5)~DML 增删改操作和 DQL 查询操作
99 0