我的数据如下:
session, age, firstName, lastName
1, 28, John, Doe
1, 21, Donna, Keren
2, 32, Jenna, Haze
2, 52, Tommy, Lee
..
..
我希望获得每个会话中最大(按年龄)的所有行。所以对于上面的输入,我的输出看起来像:
sessionid, age, firstName, lastName
1, 28, John, Doe
2, 52, Tommy, Lee
因为John在session = 1组中的年龄最大,而Tommy在session = 2组中的年龄最大。
我需要将结果导出到文件(csv),它可能包含大量记录。
我怎样才能做到这一点?
答案 0 :(得分:13)
MongoDB聚合提供$max
运算符,但在您的情况下,您需要"整个"记录原样。因此,适当的做法是$sort
,然后在$first
语句中使用$group
运算符:
db.collection.aggregate([
{ "$sort": { "session": 1, "age": -1 } },
{ "$group": {
"_id": "$session",
"age": { "$first": "$age" },
"firstName": { "$first" "$firstName" },
"lastName": { "$first": "$lastName" }
}}
])
所以"排序"获得正确的订单,并且"分组"选择"分组"中的第一个匹配项。这些字段存在的关键字。
这里大多数$first
因为$sort
按相反的顺序完成。您也可以按升序使用$last
。
答案 1 :(得分:-4)
您可以尝试以下使用max属性的聚合查询:http://docs.mongodb.org/manual/reference/operator/aggregation/max/
db.collection.aggregate([
$group: {
"_id": "$session",
"age": { $max: "$age" }
},
{ $out : "max_age" }
])
结果应输出到新集合max_age,然后您可以将其转储到csv中。
注意:它只会提供会话和最大年龄,并且不会返回其他字段。