概述
1、普通查询条件
Criteria criteria = new Criteria();
if (status == 2){ // 全部
criteria = Criteria.where("status").ne(StatusEnum.DELETED);
}else if (status == SolitaireConstant.LAUNCH){ // 我发起的
criteria = Criteria.where("userId").is(userId).and("status").ne(StatusEnum.DELETED);
}
Query queryPage = new Query(criteria);
queryPage.with(Sort.by(Sort.Order.desc("createTime"))).skip((long) page.getCurrent() * page.getSize()).limit(page.getSize()); //分页
List<StartSolitaireVO> list = mongoTemplate.find(queryPage, StartSolitaireVO.class,SolitaireConstant.START_SOLITAIRE_COLLECTION);
2、聚合查询(分组、排序、分页、连表)
// 连表
LookupOperation lookup = LookupOperation.newLookup()
// 关联的从表名字
.from(SolitaireConstant.START_SOLITAIRE_COLLECTION)
// 主表中什么字段与从表相关联
.localField("startSolitaireId")
// 从表中的什么字段与主表相关联
.foreignField("_id")
// 自定义的从表结果集名
与主表关联的数据归于此结果集下
.as("startVO");
Criteria criteria = new Criteria();
// 主表可能选择的条件
criteria.and("userId").is(userId);
// 从表可能选择的条件
criteria.and("startVO.status").ne(StatusEnum.DELETED);
// 将筛选条件放入管道中
Aggregation aggregation = Aggregation.newAggregation(
lookup,
Aggregation.match(criteria),
Aggregation.group("startSolitaireId") // 分组的字段
.first("startSolitaireId").as("startSolitaireId")
// 映射的字段 并取别名
.first("userId").as("userId")
.first("interact").as("interact")
.first("createTime").as("createTime")
.first("startVO").as("startVO"),
Aggregation.sort(Sort.Direction.DESC,"createTime"), // 排序
Aggregation.skip((long) page.getCurrent() * page.getSize()),
Aggregation.limit(page.getSize())); // 分页
AggregationResults<MySolitaireVO> aggregate = mongoTemplate.aggregate(aggregation, SolitaireConstant.MY_SOLITAIRE_COLLECTION, MySolitaireVO.class);
List<MySolitaireVO> mappedResults = aggregate.getMappedResults();
最后
以上就是勤奋猎豹为你收集整理的使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询的全部内容,希望文章能够帮你解决使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复