MongoDB map reduce - group and find top N



An,集合称为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阶段,仅返回2个结果
  2. 使用$toDecimel$toDoubledelayMinutes转换为数字,注意任何无效的字符串值将使此阶段失败。

总的来说是这样的:

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

Mongo操场

最新更新