MongoDB – 获取集合中每个组的max属性的文档

我的数据如下所示:

session, age, firstName, lastName 1, 28, John, Doe 1, 21, Donna, Keren 2, 32, Jenna, Haze 2, 52, Tommy, Lee .. .. 

我想要得到每个会话中最大(按年龄)的所有行。 所以对于上面的input,我的输出如下所示:

 sessionid, age, firstName, lastName 1, 28, John, Doe 2, 52, Tommy, Lee 

因为约翰在会议= 1组中的年龄最大,而汤米在会议= 2组中的年龄最大。

我需要将结果导出到一个文件(csv),它可能包含大量的logging。

我怎样才能做到这一点?

您可以尝试使用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。

注意:它只会给会议和最大年龄,不会返回其他字段。

MongoDB聚合提供了$max操作符,但在您的情况下,您希望“整个”logging保持原样。 所以在这里做适当的事情是$sort ,然后使用$group语句中的$first操作符:

 db.collection.aggregate([ { "$sort": { "session": 1, "age": -1 } }, { "$group": { "_id": "$session", "age": { "$first": "$age" }, "firstName": { "$first" "$firstName" }, "lastName": { "$first": "$lastName" } }} ]) 

因此,“sorting”得到正确的顺序,“分组”select“分组”键中存在这些字段的第一次出现。

这里大多是$first ,因为$sort是按相反的顺序完成的。 也可以使用$last作为升序。