使用java MongoTemplate对象完成mongoDB的指定条件,排序,分页查询

实现步骤:

1:导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>自定义版本号</version>
</dependency>

2:业务层自动装配MongoTemplate对象

 @Resource
 private MongoTemplate mongoTemplate;

3:功能实现

        //查询条件的集合(用来存储查询的所有条件)
        List<AggregationOperation> operations = new ArrayList<>();

        //查询commentBlogId列为“123123”并且commentLevelStatus列为“1”的数据
        Criteria criteria =         Criteria.where("commentBlogId").is("123123").where("commentLevelStatus").is(1);
        operations.add(Aggregation.match(criteria));

        //根据commentCreateTime降序查询
        operations.add(Aggregation.sort(Sort.Direction.DESC,"commentCreateTime"));

        //分页查询(使用skip 跳过数据,如果数据量庞大则影响性能问题)
        operations.add(Aggregation.skip( (queryAllComment.getPageNo() -1 ) * queryAllComment.getPageSize()));//设置从哪条数据开始查询(即设置页码)
        operations.add(Aggregation.limit(queryAllComment.getPageSize()));//设置每页显示条数

        Aggregation aggregation = Aggregation.newAggregation(operations);
        //将上面的查询条件进行填充并执行
        //下面三个参数分别为:自己创建的查询条件,mongoDB中被查询集合的名称,结果集被自动装配的类。
        //最终得到结果集:results
        AggregationResults<Comment> results = mongoTemplate.aggregate(aggregation, "comment", Comment.class);

        if(ObjectUtil.isEmpty(results)){
            return null;
        }
        //数据被存放在results.getMappedResults()里面
        return RestResponse.success(results.getMappedResults());

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的MongoDB分页查询工具类的实现,使用MongoTemplate和PageRequest: ```java import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; public class MongoPageUtils<T> { /** * 分页查询 * @param mongoTemplate mongoTemplate实例 * @param collectionName 集合名称 * @param pageNo 页号 * @param pageSize 每页大小 * @param sortField 排序字段 * @param sortOrder 排序方式 * @param query 查询条件 * @param clazz 返回结果类型 * @return 分页结果 */ public Page<T> findPage(MongoTemplate mongoTemplate, String collectionName, int pageNo, int pageSize, String sortField, Sort.Direction sortOrder, Query query, Class<T> clazz) { // 分页查询条件 PageRequest pageRequest = PageRequest.of(pageNo - 1, pageSize, sortOrder, sortField); // 查询总记录数 long totalCount = mongoTemplate.count(query, clazz, collectionName); // 分页查询 query.with(pageRequest); // 执行查询 return new PageImpl<>(mongoTemplate.find(query, clazz, collectionName), pageRequest, totalCount); } /** * 分页查询 * @param mongoTemplate mongoTemplate实例 * @param collectionName 集合名称 * @param pageNo 页号 * @param pageSize 每页大小 * @param sortField 排序字段 * @param sortOrder 排序方式 * @param criteria 查询条件 * @param clazz 返回结果类型 * @return 分页结果 */ public Page<T> findPage(MongoTemplate mongoTemplate, String collectionName, int pageNo, int pageSize, String sortField, Sort.Direction sortOrder, Criteria criteria, Class<T> clazz) { // 查询条件 Query query = new Query(criteria); // 分页查询 return findPage(mongoTemplate, collectionName, pageNo, pageSize, sortField, sortOrder, query, clazz); } } ``` 使用方法: ```java MongoPageUtils<User> pageUtils = new MongoPageUtils<>(); // 查询条件 Criteria criteria = Criteria.where("age").gt(18); // 排序条件 Sort sort = Sort.by(Sort.Direction.DESC, "createTime"); // 分页查询 Page<User> page = pageUtils.findPage(mongoTemplate, "user", 1, 10, "createTime", sort.getDirection(), criteria, User.class); // 获取分页结果 List<User> userList = page.getContent(); ``` 其中,MongoTemplate是Spring提供的操作MongoDB的工具类,可以在项目启动时进行注入。对于查询条件排序条件,可以使用Criteria和Sort类进行构造。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值