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