pythonmongodb分页查询语句_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

*

*/

public class Page {

// 结果集

private List 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 getDatas() {

return datas;

}

public void setDatas(List 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 getVoiceInteractionStatistics(int pageNo, int pageSize,

String robotId, String robotTypeId) {

Page page = new Page();

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 datas = mongoTemplate.find(query,

VoiceInteractionStatisticsEntity.class, collectionName);

page.setDatas(datas);

return page;

}

第三步:应用查询/**

*

* @author 作者:yaohongan

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

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

*/

public List detailStatistics(int pageNo, int pageSize, String robotId,

String robotTypeId) {

List 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 page = getVoiceInteractionStatistics(pageNo, pageSize, robotId,

robotTypeId);

if (page != null) {

List 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;

}

python学习网,大量的免费MongoDB入门教程,欢迎在线学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值