环境搭建
创建项目
创建一个SpringBoot应用
引入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
添加连接配置
#连接mongodb
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.username=admin
spring.data.mongodb.password=123456
spring.data.mongodb.database=xiang
集合操作
创建集合
@Resource
private MongoTemplate mongoTemplate;
/**
* 创建集合
*/
@Test
void testCreateCollection() {
mongoTemplate.createCollection("demo");
}
若插入的集合已经存在,则会抛出异常
@Resource
private MongoTemplate mongoTemplate;
/**
* 创建集合
*/
@Test
void testCreateCollection() {
//判断集合集合是否存在
if (!mongoTemplate.collectionExists("demo")){
mongoTemplate.createCollection("demo");
}
}
删除集合
/**
* 删除集合
*/
@Test
void testDelCollection() {
//判断集合集合是否存在
if (mongoTemplate.collectionExists("demo")) {
mongoTemplate.dropCollection("demo");
}
}
文档操作
相关注解
-
@Document
修饰范围:用在类上
作用: 用来映射这个类的一个对象为mongo中一条文档数据
属性:(value . collection )用来指定操作的集合名称 -
@Id
**修饰范围:**用在成员变量、方法上
**作用:**用来将成员变量的值映射为文档的_id的值 -
@Field
修饰范围:用在成员变量、方法上。
作用:用来将成员变量以及值映射为文档中一个key、value对
属性:( name , value )用来指定在文档中 key的名称,默认为成员变量名 -
@Transient
修饰范围:用在成员变量、方法上
**作用:**用来指定改成员变量,不参与文档的序列化
创建实体
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
//mongoDB中demo集合的一条文档
@Document(value = "demo")
public class User {
@Id
private Integer id;
private String name;
private Double salary;
private Date birthday;
public User() {
}
public User(Integer id, String name, Double salary, Date birthday) {
this.id = id;
this.name = name;
this.salary = salary;
this.birthday = birthday;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", salary=" + salary +
", birthday=" + birthday +
'}';
}
}
添加文档
@Test
void testAddCollection() {
/**
* save: 批处理数据时,,对已经存在数据进行更新。需要遍历整个数据
* insert: 插入重复数据的时候,insert报错主键重复DuplicateKeyException,一次性插入多条数据,效率高
*/
User xiang = new User(1, "xiang", 5000.0, new Date());
//mongoTemplate.save(xiang);
mongoTemplate.insert(xiang);
}
查询文档
/**
* 查询集合
*/
@Test
void testQuery() {
// 查询全部文档
List<User> userList = mongoTemplate.findAll(User.class);
//List<User> userList1 = mongoTemplate.findAll(User.class,"user");
userList.forEach(System.out::println);
//根据id查询
User byId = mongoTemplate.findById(1, User.class);
System.out.println(byId);
//条件查询
Query query = new Query();
List<User> users = mongoTemplate.find(query, User.class);
//等值查询
Query query1 = new Query(Criteria.where("name").is("xiang"));
List<User> userList1 = mongoTemplate.find(query, User.class);
// > ,< ,>= ,<=
Query query2 = new Query(Criteria.where("age").lt(23)); //age < 23
Query query3 = new Query(Criteria.where("age").lte(23)); //age <= 23
Query query4 = new Query(Criteria.where("age").gt(23)); //age > 23
Query query5 = new Query(Criteria.where("age").gte(23)); //age >= 23
//and 查询
Query query6 = new Query(Criteria.where("age").lt(23).and("salary").lt(3000)); //age < 23 and salary < 3000
Query query7 = new Query(Criteria.where("age").lt(23).orOperator(Criteria.where("salary").lt(3000))); //age < 23 or salary < 3000
List<User> userList6 = mongoTemplate.find(query6, User.class);
List<User> userList7 = mongoTemplate.find(query6, User.class);
//排序
Query querySort = new Query();
querySort.with(Sort.by(Sort.Order.desc("salary"))); //工资降序
List<User> userList2 = mongoTemplate.find(querySort, User.class);
//分页
Query queryPage = new Query();
querySort.with(Sort.by(Sort.Order.desc("salary"))).skip(0).limit(10); //分页
List<User> userList3 = mongoTemplate.find(queryPage, User.class);
//总条数
long count = mongoTemplate.count(new Query(), User.class);
//去重 查询对象 去重字段 操作集合 返回类型
mongoTemplate.findDistinct(new Query(),"name",User.class,String.class);
//json字符串查询
Query base = new BasicQuery("{'name':'xiang'}");
Query base1 = new BasicQuery("{$or:[{'name':'xiang'}]}");
List<User> userList4 = mongoTemplate.find(base, User.class);
}
文档更新
/**
* 更新文档
*/
@Test
void testUpdate(){
Query query = new Query(Criteria.where("name").is("xiang"));
Update update = new Update();
update.setOnInsert("id",1); //如果插入不用默认的id
update.set("salary",99999.0);
//更新符合条件的一条数据
mongoTemplate.updateFirst(query,update,User.class);
// 更新多条
mongoTemplate.updateFirst(query,update,User.class);
// 插入更新,没有符合条件的就插入这条数据。
UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
upsert.getModifiedCount(); //获取修改的记录
upsert.getMatchedCount(); //本次匹配的记录
}
文档删除
/**
* 删除文档
*/
@Test
void testDel(){
//删除全部
//DeleteResult remove = mongoTemplate.remove(new Query(), User.class);
// 条件删除
mongoTemplate.remove(new Query(Criteria.where("name").is("xiang")), User.class);
}