MongoDB分页排序问题,本页排序与结果集排序

项目中有使用到MongoDB,由于比较高频查询与写入,出现了每次查询的结果集都会变的问题。

描述

我使用的是skip+limit的分页方式,模拟mysql的 limit 0,10去分页
由于出现了结果集变化的问题,我想着使用排序去固定返回的结果集,结果依旧不能如愿。究其原因是因为我的语句顺序问题

//这个aggregating用来分页
        Aggregation pageAggregation = Aggregation.newAggregation(
                //查询的字段
                projectionOperation,
                //条件
                Aggregation.match(criteria),
                Aggregation.group("deviceCode")
                        .sum("deviceUseDuration").as("useDuration")
                        .count().as("useNumber").last("deviceCode").as("deviceCode"),
                Aggregation.skip((long) pageNum * pageSize),
                Aggregation.sort(Sort.Direction.ASC,"deviceCode"),
                Aggregation.limit(pageSize)
        );

sort()根据deviceCode进行排序,由skip与limit进行分页。
结果sort只能排序当页的数据,原因是sort在skip后面,skip的作用是跳过指定行,先跳过后排序,那么结果肯定不尽人意。

需要将sort放在skip&limit之前。
//这个aggregating用来分页
                Aggregation.sort(Sort.Direction.ASC,"deviceCode"),
                Aggregation.skip((long) pageNum * pageSize),
                Aggregation.limit(pageSize)

mongodb的排序分页是按照流形式去处理数据的,如果是先分页再排序,会导致数据只取前10条,然后在这10条数据里面排序,也就对应前端的效果是排序只对当前页面有效。包括如果使用了统计的方法,如果分页方法在此之前,也会导致先分页在排序的情况出现。因为如果使用了流,分页也会同步使用,尽量在使用流处理之前不分页。

你可能感兴趣的:(mongodb,数据库,java)