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类。

二、基本分页

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

第一步:实现分页工具类

package com.qt.robot.mongoEntity;


import java.util.List;


/**

 * 分页

 * @author 作者:yaohongan

 * @create 创建时间:2018年10月9日上午9:53:15

 *

 */

publicclassPage<T> {


    // 结果集

    privateList<T> datas;


    // 查询记录数

    privateint rowCount;


    // 每页多少条数据

    privateint pageSize = 10;


    // 第几页

    privateint pageNo = 1;


    // 跳过几条数

    privateint skip = 0;


    /**

     * 总页数

     * @return

     */

    publicint getTotalPages() {


        return(rowCount + pageSize - 1) / pageSize;

    }


    publicList<T> getDatas() {


        returndatas;

    }


    publicvoid setDatas(List<T> datas) {


        this.datas = datas;

    }


    publicint getRowCount() {


        returnrowCount;

    }


    publicvoid setRowCount(int rowCount) {


        this.rowCount = rowCount;

    }


    publicint getPageSize() {


        returnpageSize;

    }


    publicvoid setPageSize(int pageSize) {


        this.pageSize = pageSize;

    }


    publicint getSkip() {


        skip = (pageNo - 1) * pageSize;

        returnskip;

    }


    publicvoid setSkip(int skip) {


        this.skip = skip;

    }


    publicint getPageNo() {


        returnpageNo;

    }


    publicvoid setPageNo(int pageNo) {


        this.pageNo = pageNo;

    }


}

第二步:实现分页

/**

     *

     * @author 作者:yaohongan

     * @create 创建时间:2018年10月9日下午3:17:03

     * @desc 分页根据条件查询机器人id

     */

    publicPage<VoiceInteractionStatisticsEntity> getVoiceInteractionStatistics(int pageNo, int pageSize,

            String robotId, String robotTypeId) {


        Page<VoiceInteractionStatisticsEntity> page = newPage<VoiceInteractionStatisticsEntity>();

        page.setPageNo(pageNo);

        page.setPageSize(pageSize);

        Query query = newQuery();

        Criteria criteria = newCriteria();

        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 = newQuery(criteria);

            count= (int) mongoTemplate.count(query, collectionName);

            page.setRowCount(count);

        }

        // 根据robotTypeId(机器人设备id)查询

        if(StringUtils.isNoneBlank(robotTypeId)) {

            criteria = Criteria.where("robotTypeId").is(robotTypeId);

            query = newQuery(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 = newQuery(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);

        returnpage;

    }

第三步:应用查询

/**

     *

     * @author 作者:yaohongan

     * @create 创建时间:2018年10月9日上午10:00:50

     * @desc 实时统计语音交互明细

     */

    publicList<VoiceInteractionStatistics> detailStatistics(int pageNo, int pageSize, String robotId,

            String robotTypeId) {


        List<VoiceInteractionStatistics> detailStatisticsList = newArrayList<>();


        Datedate= newDate();

        date.setHours(0);

        date.setMinutes(0);

        date.setSeconds(0);

        Datedate1 = newDate();

        Calendar calc = Calendar.getInstance();

        calc.setTime(date);

        calc.add(calc.DATE, -1);

        DateminDate = 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 = newQuery(today);

                int todayTotal = (int) mongoTemplate.count(queryByToday, collectionName);

                // 查询昨日消息数

                yesterday = Criteria.where("time").gte(minDate).lt(date).and("robotId")

                        .is(voiceInteractionStatisticsEntity.getRobotId());

                queryByYesterday = newQuery(yesterday);

                int yesterdayTotal = (int) mongoTemplate.count(queryByYesterday, collectionName);

                // 查询访问总量

                total = Criteria.where("robotId").is(voiceInteractionStatisticsEntity.getRobotId());

                queryByTotal = newQuery(total);

                int totals = (int) mongoTemplate.count(queryByTotal, collectionName);

                String robotId1 = voiceInteractionStatisticsEntity.getRobotId();

                String robotTypeId1 = voiceInteractionStatisticsEntity.getRobotTypeId();

                String robotTypeName = voiceInteractionStatisticsEntity.getRobotTypeName();

                VoiceInteractionStatistics voiceInteractionStatistics = newVoiceInteractionStatistics

                (robotId1, robotTypeId1, robotTypeName, todayTotal, yesterdayTotal, totals);

                detailStatisticsList.add(voiceInteractionStatistics);


            }

        }


        returndetailStatisticsList;

    }

本文转自:https://www.py.cn/db/mongodb/15387.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容