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();