前期准备
maven配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
mongodb配置
spring:
data:
mongodb:
host: 127.0.0.1 //ip
port: 9091 //端口
database: test //数据库名
username: admin //用户名
password: 123456 //密码
mongoTemplate 引入
@Autowired
private MongoTemplate template;
mongoOperations 引入
@Autowired
private MongoOperations mongoOperations;
新增文档
//insert方法并不提供级联类的保存,所以级联类需要先自己先保存
//执行完insert后对象obj将会获得保存后的id
//注意:若新增数据的主键已经存在,则会抛DuplicateKeyException异常
mongoTemplate.insert(obj);
//若保存数据的主键已经存在,则会对已经存在的数据修改
mongoTemplate.save(obj);
删除文档
mongoTemplate.remove(obj); //不支持级联
查询相关
//分页查询
Criteria criteria = Criteria.where("deleteStatus").ne(true);
Sort sort = new Sort(Sort.Direction.DESC, HunterCompany.FIELD_MODIFY_DATE);
Query query = Query.query(criteria).with(sort).skip(pageIndex * pageSize).limit(pageSize);
mongoOperations.find(query, Position.class);
//查询指定的字段
Criteria criteria = Criteria.where("id").is("5e96b86a4b89353e59cdb18e");
Query query = Query.query(criteria);
query.fields().include("name").include("companyName").include("department");
mongoOperations.findOne(query, Position.class);
//聚合查询
Criteria criteria = Criteria.where("senderId").is(senderId).and("companyId").is(companyId);
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(criteria),
Aggregation.unwind(field), //拆分数据里的数组
Aggregation.group(field).count().as(CommonSo.FIELD_RESULT),
Aggregation.sort(new Sort(Sort.Direction.DESC, CommonSo.FIELD_RESULT)),
Aggregation.project().and(Fields.UNDERSCORE_ID).as(CommonSo.FIELD_ID).and(CommonSo.FIELD_RESULT)
);
List<CommonSo> results = super.mongoOperations.aggregate(agg, this.getReturnClass(), CommonSo.class).getMappedResults();