Spring Boot MongoDB
引入maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
保存操作
// 保存一条数据到mongodb 默认的集合名称为 student
mongoTemplate.save(student);
// 保存一条数据到mongodb 并设置集合名称为studentNew
mongoTemplate.save(student, "studentNew");
// 保存一条数据到mongodb 默认的集合名称为 student
mongoTemplate.insert(student);
// 保存一条数据到mongodb 并设置集合名称为studentNew
mongoTemplate.insert(student, "studentNew");
// 批量保存数据到mongodb 默认的集合名称为 student
mongoTemplate.insert(list, Student.class);
save和insert的区别
- save 在id不存在的情况下会插入一条新的数据,若id存在则执行更新的操作
- insert 在id不存在的情况下会插入一条新的数据,若id存在则抛出DuplicateKeyException异常
修改操作
Update update = new Update();
update.set("name", "test-update");
update.set("time", LocalDateTime.now());
Query query = new Query();
query.addCriteria(Criteria.where("id").gt(1));
// 只修改符合条件的第一条数据
mongoTemplate.updateFirst(query, update, Student.class);
// 修改所有符合条件的数据
mongoTemplate.updateMulti(query, update, Student.class);
query = new Query();
query.addCriteria(Criteria.where("id").gt(10000));
update.set("id", 10000);
// 如果数据存在,则更新此数据 如果数据不存在则插入一条新的数据
mongoTemplate.upsert(query, update, Student.class);
update和upsert的区别
- update的数据不存在,不做任何操作
- upsert的数据不存在,会新增一条数据
查询操作
Query query = new Query();
query.addCriteria(Criteria.where("id").is(1));
// findOne 只查询一条数据
Student student = mongoTemplate.findOne(query, Student.class);
//gt >
//lt <
//gte >=
//lte <=
//is =
//ne !=
query = new Query();
query.addCriteria(Criteria.where("id").gt(1));
// find 查询符合条件的所有数据
List<Student> students = mongoTemplate.find(query, Student.class);
Student probe = new Student();
probe.setName("test");
// 查询name中包含test的 模糊匹配查询
Example<Student> example = Example.of(probe, ExampleMatcher.matching()
//忽略空值
.withIgnoreNullValues()
//忽略大小写
.withIgnoreCase()
.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains));
//ExampleMatcher.GenericPropertyMatcher::contains 完全包含
//ExampleMatcher.GenericPropertyMatcher::startsWith 前缀开始
//ExampleMatcher.GenericPropertyMatcher::endWith 后缀结尾
//ExampleMatcher.GenericPropertyMatcher::exact 完全匹配
//andOperator链接 相当于sql中的and
//orOperator 相当于sql中的or
//alike 模糊查询
query = new Query();
query.addCriteria(new Criteria().alike(example).andOperator(Criteria.where("id").gt(80)));
students = mongoTemplate.find(query, Student.class);
删除操作
// 根据指定的条件完全删除
mongoTemplate.remove(new Query().addCriteria(Criteria.where("id").lt(10)), Student.class);