首页 > 解决方案 > 对最后/第一个 X 文档进行分组的最佳方法

问题描述

是否有任何聚合管道阶段可以帮助对一些结果进行分组,如下所示:

{ "_id": "some-id-1", "sum": 14.49 }
{ "_id": "some-id-2", "sum": 12.49 }
{ "_id": "some-id-3", "sum": 9.99 }
{ "_id": "some-id-4", "sum": 8.49 }
{ "_id": "some-id-5", "sum": 7.49 }

所以它只会对记录#3之后的文档进行分组?例如:

{ "_id": "some-id-1", "sum": 14.49 }
{ "_id": "some-id-2", "sum": 12.49 }
{ "_id": "some-id-3", "sum": 9.99 }
{ "_id": "grouped", "sum": 15.98 } <---- partial group by

我正在查看,但如果事先知道$bucket它似乎会有所帮助。sum

这个想法是减少 mongodb 在结果集很大时必须运回的数据量。

标签: mongodbaggregation

解决方案


最终使用$facet

{ 
   $facet: {
    list: [ {
      $limit: 3
    } ],
    other: [
      { $skip: 3 },
      { $group: {
        _id: 'other',
        sum: {$sum: '$sum'},
      } },
      ],
  }
}

推荐阅读