MongoDB map reduce - 分组并找到前 N 个

MongoDB map reduce - group and find top N

一个名为 test 的集合

考虑这个测试集合,其中机场由 AirportID 标识:

{ AirportID:"1001", delayMinutes :"15.0" },
{ AirportID:"1004", delayMinutes :"3.0" },
{ AirportID:"1001", delayMinutes :"20.0" },
{ AirportID:"1002", delayMinutes :"6.0" },
{ AirportID:"1002", delayMinutes :"25.0" },
{ AirportID:"1004", delayMinutes :"55.0" },

我想将其组合在一起并列出该列表中的前 2 个。

这是我试过的查询:

db.test.aggregate([
  { $group: { _id: "$AirportID", delayMinutes: { $sum: 1 } } }, 
  { $sort: { delayMinutes: -1 } }
])

但它对我不起作用

你已经很接近了,你只需要再做两件事:

  1. 在最后添加一个 $limit 阶段,只有 return 2 个结果
  2. 使用 $toDecimel$toDoubledelayMinutes 转换为数字,请注意,任何无效的字符串值都会导致此阶段失败。

总的来说是这样的:

db.test.aggregate([
  {
    $group: {
      _id: "$AirportID",
      delayMinutes: {
        $sum: {
          "$toDouble": "$delayMinutes"
        }
      }
    }
  },
  {
    $sort: {
      delayMinutes: -1
    }
  },
  {
    $limit: 2
  }
])

Mongo Playground