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 } }
])
但这对我不起作用
你已经很接近了,你只需要再做两件事:
- 在末尾添加
$limit
阶段,仅返回2个结果 - 使用
$toDecimel
或$toDouble
将delayMinutes
转换为数字,注意任何无效的字符串值将使此阶段失败。
总的来说是这样的:
db.test.aggregate([
{
$group: {
_id: "$AirportID",
delayMinutes: {
$sum: {
"$toDouble": "$delayMinutes"
}
}
}
},
{
$sort: {
delayMinutes: -1
}
},
{
$limit: 2
}
])
Mongo操场