Spring Data MongoDB

Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库。

1.pom.xml中引入依赖(本项目为springboot项目)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.application.properties中添加mongodb服务端配置

spring.data.mongodb.uri=mongodb://userName:password@ip:port/test
spring.data.mongodb.databaseName=test

3.注入MongoTemplate

@Autowired
protected MongoTemplate mongoTemplate;

4.聚合操作

//1.创建集合	
if (!mongoTemplate.collectionExists(BasicDataCollection.class)) {
    mongoTemplate.createCollection(BasicDataCollection.class);
}

//2.查找文档
BasicDataCollection history = mongoTemplate.findOne(new Query(Criteria.where("selectDate").gte(beginDate).lte(endDate)),BasicDataCollection.class);

//3.插入文档
List<BasicDataCollection> basicDataList = new ArrayList<BasicDataCollection>();
... basicDataList赋值略 ...
if (!CollectionUtils.isEmpty(basicDataList)) {
    mongoTemplate.insertAll(basicDataList);
}

//4.查询某个集合满足条件的数据总数(多个条件用and()拼接)
Query query = new Query();
query.addCriteria(Criteria.where(ORDER_DATE).lte(dateStr).and(IS_FINISHED_ORDER).is(true)    .and(TOTAL_AMOUNT).gt(ORDER_MIN_AMOUNT));//截止某一天总数小于ORDER_MIN_AMOUNT的完成订单
mongoTemplate.count(query, OrderCollection.class);

//5.聚合操作
List<OrderCollection> totalOrderList = new ArrayList<>(OrderCollection);
long totalRecord = this.getOrderCount();
int totalPage = (int)((totalRecord + PAGE_SIZE -1) / PAGE_SIZE);
for (int i = 0; i < totalPage; i++) {
	aggregation = Aggregation.newAggregation(
        Aggregation.project(ORDER_DATE,IS_FINISHED_ORDER,ENTERPRISE_NAME,USER_ID)
			.and(PAID_AMOUNT).plus(INTEGRAL_AMOUNT).as(TOTAL_AMOUNT),
		Aggregation.match(Criteria.where(ORDER_DATE).lte(dateStr)						     
            .and(IS_FINISHED_ORDER).is(true).and(TOTAL_AMOUNT).gt(ORDER_MIN_AMOUNT)),
		Aggregation.skip(PAGE_SIZE * i),  
		Aggregation.limit(PAGE_SIZE)   
    );
    List<OrderCollection> pageList = mongoTemplate.aggregate(aggregation,     
           OrderCollection.class, OrderCollection.class).getMappedResults();
	totalOrderList.addAll(pageList);
}

Aggregation.project() 修改文档结构,显示查询的字段;

Aggregation.match() 查询的条件;

Aggregation.skip() 跳过多少条记录;

Aggregation.limit() 查询多少条记录;

此外还有 Aggregation.group() 可以分组操作。

猜你喜欢

转载自blog.csdn.net/zzz127333092/article/details/81662685
今日推荐