【MongoDB】SpringBoot整合MongoDB
文章目录
- 【MongoDB】SpringBoot整合MongoDB
- 0. 准备工作
- 1. 集合操作
- 1.1 创建集合
- 1.2 删除集合
- 2. 相关注解
- 3. 文档操作
- 3.1 添加文档
- 3.2 批量添加文档
- 3.3 查询文档
- 3.3.1 查询所有文档
- 3.3.2 根据id查询
- 3.3.3 等值查询
- 3.3.4 范围查询
- 3.3.5 and查询
- 3.3.6 or查询
- 3.3.7 and or 查询
- 3.3.8 排序
- 3.3.9 分页查询
- 3.3.10 查询总条数
- 3.3.11 去重
- 3.3.12 json字符串查询
- 3.4 修改文档
- 3.4.1 更新单条文档
- 3.4.2 批量更新文档
- 3.4.3 修改或插入文档
- 3.5 删除文档
- 3.5.1 删除所有文档
- 3.5.2 条件删除
0. 准备工作
引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
1. 集合操作
1.1 创建集合
创建一个 ”products“ 集合,如果不存在则创建,存在则不创建。
@Test
public void createCollection() {
//不存在集合则创建
if (!mongoTemplate.collectionExists("products")) {
mongoTemplate.createCollection("products");
}
}
1.2 删除集合
@Test
public void dropCollection() {
mongoTemplate.dropCollection("products");
}
2. 相关注解
@Document
- 修饰范围:用在类上
- 作用:用来映射这个类的一个对象为 mongo 中一条文档数据
- 属性:{value、collection} 用来指定操作的集合名称
@Id
- 修饰范围:用在成员变量、方法上
- 作用:用来将成员变量的值映射为文档的
_id
的值
@Field
- 修饰范围:用在成员变量、方法上
- 作用:用来将成员变量以及值映射为文档中一个 key,value 对
- 属性:{name,value} 用来指定在文档中key的名称,默认为成员变量名
@Transient
- 修饰范围:用在成员变量、方法上
- 作用:用来指定某个成员变量不参与文档的序列化
3. 文档操作
首先创建一个 User 类,给它一些基本属性。
@Data
@AllArgsConstructor
@NoArgsConstructor
//表示类实例代表mongo中一条文档
@Document("users")
public class User {
private Integer id;
private String name;
private Double salary;
private Date birthday;
}
3.1 添加文档
向 users 集合中添加文档:
@Test
public void saveDocument() {
User user = new User(1, "zhj", 25000.0, new Date());
//mongoTemplate.save(user);
mongoTemplate.insert(user);
}
- insert():插入重复数据时,该方法会报异常提示主键重复。
- save():对已经存在的数据进行更新。它的功能就是 saveOrUpdate
3.2 批量添加文档
@Test
public void batchSaveDocument() {
List<User> users = Arrays.asList(
new User(3, "张三", 25000.0, new Date())
, new User(4, "李四", 25000.0, new Date())
);
mongoTemplate.insert(users,User.class);
}
批量添加建议使用 insert()
方法,可以一次性插入整个数据,效率更高。
3.3 查询文档
3.3.1 查询所有文档
List<User> users = mongoTemplate.findAll(User.class);
//List<User> users1 = mongoTemplate.findAll(User.class, "users");
3.3.2 根据id查询
User user = mongoTemplate.findById(1, User.class);
3.3.3 等值查询
List<User> users1 = mongoTemplate.find(Query.query(Criteria.where("name").is("zs")), User.class);
3.3.4 范围查询
List<User> users2 = mongoTemplate.find(Query.query(Criteria.where("salary").gt(30000)), User.class);
3.3.5 and查询
List<User> users3 = mongoTemplate.find(Query.query(Criteria.where("name").is("zs").and("salary").is(25000)), User.class);
3.3.6 or查询
Criteria criteria = new Criteria();
criteria.orOperator(
Criteria.where("name").is("张三"),
Criteria.where("name").is("李四")
);
List<User> users4 = mongoTemplate.find(Query.query(criteria), User.class);
3.3.7 and or 查询
List<User> users5 = mongoTemplate.find(Query.query(Criteria.where("salary").is(25000.0).orOperator(Criteria.where("name").is("zs"))), User.class);
3.3.8 排序
Query query = new Query();
query.with(Sort.by(Sort.Order.asc("id")));
List<User> users6 = mongoTemplate.find(query, User.class);
3.3.9 分页查询
Query pageQuery = new Query();
//查询第一页数据,每页展示两条数据
pageQuery.with(Sort.by(Sort.Order.desc("id")))
.skip(0)
.limit(2);
List<User> users7 = mongoTemplate.find(pageQuery, User.class);
3.3.10 查询总条数
long count = mongoTemplate.count(new Query(), User.class);
System.out.println("总条数为:" + count);
3.3.11 去重
List<String> names = mongoTemplate.findDistinct(new Query(), "name", User.class, String.class);
3.3.12 json字符串查询
BasicQuery basicQuery = new BasicQuery("{name:'zs'}");
List<User> users8 = mongoTemplate.find(basicQuery, User.class);
3.4 修改文档
3.4.1 更新单条文档
Update update = new Update();
update.set("salary",300000.0);
//更新符合条件的第一条数据
mongoTemplate.updateFirst(Query.query(Criteria.where("name").is("zs")),update,User.class);
3.4.2 批量更新文档
Update update = new Update();
update.set("salary",300000.0);
//将所有满足条件的文档都修改
mongoTemplate.updateMulti(Query.query(Criteria.where("name").is("zs")),update,User.class);
3.4.3 修改或插入文档
Update update = new Update();
update.set("id",6);
update.set("salary", 300000.0);
//没有符合条件的数据,则插入数据
mongoTemplate.upsert(Query.query(Criteria.where("name").is("ls")),update,User.class);
如果没有包含”ls“这条文档,那么就会插入”ls“这条文档,但是如果id重复,那么就会抛出异常。
Update update = new Update();
update.set("salary", 300000.0);
//没有符合条件的数据,则插入数据
UpdateResult upsert = mongoTemplate.upsert(Query.query(Criteria.where("name").is("ww")), update, User.class);
//获取本次修改记录条数
long modifiedCount = upsert.getModifiedCount();
System.out.println(modifiedCount);
//获取本次匹配的记录条数
long matchedCount = upsert.getMatchedCount();
System.out.println(matchedCount);
//当集合种没有对应的文档,那么就插入文档,获得插入文档自动生成的id
System.out.println(upsert.getUpsertedId());
3.5 删除文档
3.5.1 删除所有文档
mongoTemplate.remove(new Query(),User.class);
3.5.2 条件删除
mongoTemplate.remove(Query.query(Criteria.where("name").is("ls")),User.class);