重复导致对跳过和限制的分页进行分组排序

时间:2015-12-03 11:05:15

标签: mongodb mongoose aggregation-framework

我有以下聚合查询来对分组数据进行排序并将其返回到页面中:

Product.aggregate([
  { $match : { categories : category, brand : { $ne: null } }},
  { $group : { _id : '$brand', rating: { $max: '$rating' } } },
  { $sort : { rating : -1 } },
  { $skip : skip },
  { $limit : limit }], function(error, results){
    ....
  })

这是为了找到具有输入类别和品牌的产品品牌,按品牌分组,并按品牌组中评价最高的产品对品牌组进行分类。这意味着使用跳过和限制参数进行分页。

当我对它进行分页时,我最终会偶尔重复结果(偶尔只有一个组,我没有注意到一个模式)。我知道数据不包含重复的产品,并且没有任何数据在调用之间发生变化,所以我在查询中做错了什么来获得这些结果?

1 个答案:

答案 0 :(得分:3)

汇总问题与多个品牌评级相同的情况有关。在这种情况下,您无法保证它们将以相同的顺序出现。

解决方案是强制品牌排序等同评级案例:

{ $sort : { rating : -1, "_id" : 1 } }