我有以下查询,应该为每个州获取在州内飞行的航班数量。基本上,原点状态和目标状态是相同的。非常直截了当。
function(){
return db.flight_info.aggregate([
{ $project: { matches: { $eq:[ '$ORIGIN_STATE_ABR', '$DEST_STATE_ABR' ] }} },
{ $match: { matches:true } },
{ $group: { _id: "$ORIGIN_STATE_ABR", total: {$sum: 1} } }
]);
}
问题在于,由于某种原因,这实际上并不是对我的数据进行分组。输出看起来像这样:
{
"_id": null,
"total": 61402
}
虽然它应该是:
{
{"_id": "FL",
"total": 620 },
{"_id": "GA",
"total": 896},
...
}
答案 0 :(得分:1)
您错过了$ project中的ORIGIN_STATE_ABR,这导致了分组中的问题。
db.flight_info.aggregate([
{ $project: { ORIGIN_STATE_ABR: 1,
matches: { $eq:[ '$ORIGIN_STATE_ABR', '$DEST_STATE_ABR' ] } } },
{ $match: { matches:true } },
{ $group: { _id: "$ORIGIN_STATE_ABR", total: { $sum: 1 } } }
]);