orc*_*man 4 mongoose mongodb node.js mongodb-query aggregation-framework
我的数据如下:
session, age, firstName, lastName
1, 28, John, Doe
1, 21, Donna, Keren
2, 32, Jenna, Haze
2, 52, Tommy, Lee
..
..
Run Code Online (Sandbox Code Playgroud)
我想获得每个会话中最大(按年龄)的所有行.所以对于上面的输入我的输出看起来像:
sessionid, age, firstName, lastName
1, 28, John, Doe
2, 52, Tommy, Lee
Run Code Online (Sandbox Code Playgroud)
因为John在session = 1组中的年龄最大,而Tommy在session = 2组中的年龄最大.
我需要将结果导出到文件(csv),它可能包含大量记录.
我怎样才能做到这一点?
Nei*_*unn 14
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" }
}}
])
Run Code Online (Sandbox Code Playgroud)
因此,"排序"使订单正确,"分组"选择"分组"键中存在这些字段的第一个匹配.
$first这里主要是因为它$sort是以相反的顺序完成的.您也可以$last按升序使用.
Lal*_*wal -6
您可以尝试以下使用 max 属性的聚合查询:http://docs.mongodb.org/manual/reference/operator/aggregation/max/
db.collection.aggregate([
$group: {
"_id": "$session",
"age": { $max: "$age" }
},
{ $out : "max_age" }
])
Run Code Online (Sandbox Code Playgroud)
结果应输出到新集合 max_age,然后您可以将其转储到 csv 中。
注意:它只会给出会话和最大年龄,不会返回其他字段。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |