mongodb写分页查询语句的方法

发布时间:2020-07-30 14:27:51 作者:清晨
来源:亿速云 阅读:991

这篇文章主要介绍mongodb写分页查询语句的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、简介

SpringData  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的find的操作,分页查询是返回到匹配文档的游标,可以随意修改查询限制、跳跃、和排序顺序的功能。

我们在查询时find()方法接受Query类型有:

(1)org.springframework.data.mongodb.core.query

(2)org.springframework.data.mongodb.core.query.BasicQuery

Query类提供方法有limit、skip、sort查询限制、跳跃、和排序顺序的功能,BasicQuery继承了Query类。

mongodb写分页查询语句的方法

二、基本分页

Query类提供方法有limit、skip、sort查询限制、跳跃、和排序顺序的功能,我们实现Query查询分页。

第一步:实现分页工具类

package com.qt.robot.mongoEntity;
 
import java.util.List;
 
/**
 * 分页
 * @author 作者:yaohongan
 * @create 创建时间:2018年10月9日上午9:53:15
 *
 */
public class Page<T> {
 
    // 结果集
    private List<T> datas;
 
    // 查询记录数
    private int rowCount;
 
    // 每页多少条数据
    private int pageSize = 10;
 
    // 第几页
    private int pageNo = 1;
 
    // 跳过几条数
    private int skip = 0;
 
    /**
     * 总页数
     * @return
     */
    public int getTotalPages() {
 
        return (rowCount + pageSize - 1) / pageSize;
    }
 
    public List<T> getDatas() {
 
        return datas;
    }
 
    public void setDatas(List<T> datas) {
 
        this.datas = datas;
    }
 
    public int getRowCount() {
 
        return rowCount;
    }
 
    public void setRowCount(int rowCount) {
 
        this.rowCount = rowCount;
    }
 
    public int getPageSize() {
 
        return pageSize;
    }
 
    public void setPageSize(int pageSize) {
 
        this.pageSize = pageSize;
    }
 
    public int getSkip() {
 
        skip = (pageNo - 1) * pageSize;
        return skip;
    }
 
    public void setSkip(int skip) {
 
        this.skip = skip;
    }
 
    public int getPageNo() {
 
        return pageNo;
    }
 
    public void setPageNo(int pageNo) {
 
        this.pageNo = pageNo;
    }
 
}

第二步:实现分页

/**
     *
     * @author 作者:yaohongan
     * @create 创建时间:2018年10月9日下午3:17:03
     * @desc 分页根据条件查询机器人id
     */
    public Page<VoiceInteractionStatisticsEntity> getVoiceInteractionStatistics(int pageNo, int pageSize,
            String robotId, String robotTypeId) {
 
        Page<VoiceInteractionStatisticsEntity> page = new Page<VoiceInteractionStatisticsEntity>();
        page.setPageNo(pageNo);
        page.setPageSize(pageSize);
        Query query = new Query();
        Criteria criteria = new Criteria();
        int count = 0;
        // 查询总数
        // 只分页查询
        if (StringUtils.isBlank(robotId) && StringUtils.isBlank(robotTypeId)) {
            count = (int) mongoTemplate.count(query, collectionName);
            page.setRowCount(count);
        }
        // 根据robotId(机器人id)查询
        if (StringUtils.isNoneBlank(robotId)) {
            criteria = Criteria.where("robotId").is(robotId);
            query = new Query(criteria);
            count = (int) mongoTemplate.count(query, collectionName);
            page.setRowCount(count);
        }
        // 根据robotTypeId(机器人设备id)查询
        if (StringUtils.isNoneBlank(robotTypeId)) {
            criteria = Criteria.where("robotTypeId").is(robotTypeId);
            query = new Query(criteria);
            count = (int) mongoTemplate.count(query, collectionName);
            page.setRowCount(count);
        }
        // 根据robotId、robotTypeId查询
        if (StringUtils.isNoneBlank(robotId) && StringUtils.isNoneBlank(robotTypeId)) {
            criteria = Criteria.where("robotTypeId").is(robotTypeId).and("robotId").is(robotId);
            query = new Query(criteria);
            count = (int) mongoTemplate.count(query, collectionName);
            page.setRowCount(count);
        }
 
        query.skip(page.getSkip()).limit(page.getPageSize());
        List<VoiceInteractionStatisticsEntity> datas = mongoTemplate.find(query, 
        VoiceInteractionStatisticsEntity.class, collectionName);
        page.setDatas(datas);
        return page;
    }

第三步:应用查询

/**
     *
     * @author 作者:yaohongan
     * @create 创建时间:2018年10月9日上午10:00:50
     * @desc 实时统计语音交互明细
     */
    public List<VoiceInteractionStatistics> detailStatistics(int pageNo, int pageSize, String robotId,
            String robotTypeId) {
 
        List<VoiceInteractionStatistics> detailStatisticsList = new ArrayList<>();
 
        Date date = new Date();
        date.setHours(0);
        date.setMinutes(0);
        date.setSeconds(0);
        Date date1 = new Date();
        Calendar calc = Calendar.getInstance();
        calc.setTime(date);
        calc.add(calc.DATE, -1);
        Date minDate = calc.getTime();
        Criteria today = null;
        Criteria yesterday = null;
        Criteria total = null;
        Query queryByToday = null;
        Query queryByYesterday = null;
        Query queryByTotal = null;
        // 根据条件查询机器人id
        Page<VoiceInteractionStatisticsEntity> page = getVoiceInteractionStatistics(pageNo, pageSize, robotId,
                robotTypeId);
        if (page != null) {
            List<VoiceInteractionStatisticsEntity> list = page.getDatas();
            for (VoiceInteractionStatisticsEntity voiceInteractionStatisticsEntity : list) {
                // 查询今日消息数
                today = Criteria.where("time").gte(date).lt(date1).and("robotId")
                        .is(voiceInteractionStatisticsEntity.getRobotId());
                queryByToday = new Query(today);
                int todayTotal = (int) mongoTemplate.count(queryByToday, collectionName);
                // 查询昨日消息数
                yesterday = Criteria.where("time").gte(minDate).lt(date).and("robotId")
                        .is(voiceInteractionStatisticsEntity.getRobotId());
                queryByYesterday = new Query(yesterday);
                int yesterdayTotal = (int) mongoTemplate.count(queryByYesterday, collectionName);
                // 查询访问总量
                total = Criteria.where("robotId").is(voiceInteractionStatisticsEntity.getRobotId());
                queryByTotal = new Query(total);
                int totals = (int) mongoTemplate.count(queryByTotal, collectionName);
                String robotId1 = voiceInteractionStatisticsEntity.getRobotId();
                String robotTypeId1 = voiceInteractionStatisticsEntity.getRobotTypeId();
                String robotTypeName = voiceInteractionStatisticsEntity.getRobotTypeName();
                VoiceInteractionStatistics voiceInteractionStatistics = new VoiceInteractionStatistics
                (robotId1, robotTypeId1, robotTypeName, todayTotal, yesterdayTotal, totals);
                detailStatisticsList.add(voiceInteractionStatistics);
 
            }
        }
 
        return detailStatisticsList;
    }

以上是mongodb写分页查询语句的方法的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. mongodb 常用查询语句
  2. SQL查询语句怎么写

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mongodb %d mong

上一篇:C++选择排序算法的用法

下一篇:前端知识 | CSS小技巧-自适应椭圆

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》