我的用户群存储在mongo中。用户可以记录他们的出生日期。
我需要运行一个按年龄汇总用户的报告。

我现在有一个管道,可以按出生年份对用户进行分组。但是,这还不够精确,因为大多数人不是在1月1日出生。因此,即使他们出生于1970年,他们可能还不到43岁。

db.Users.aggregate([
    { $match : { "DateOfBirth" : { $exists : true} } },
    { $project : {"YearOfBirth" : {$year : "$DateOfBirth"} } },
    { $group : { _id : "$YearOfBirth", Total : { $sum : 1} } },
    { $sort : { "Total" : -1 } }
])

您是否知道是否可以在汇总框架内执行某种算术以准确计算用户年龄?还是仅使用MapReduce可以做到这一点?

最佳答案

刚发布的新Mongo 2.4版本似乎可以完成所有工作,它支持其他Date操作(即“$ subtract”)。

这是我的操作方式:

db.Users.aggregate([
    { $match : { "DateOfBirth" : { $exists : true} } },
    { $project : {"ageInMillis" : {$subtract : [new Date(), "$DateOfBirth"] } } },
    { $project : {"age" : {$divide : ["$ageInMillis", 31558464000] }}},
    // take the floor of the previous number:
    { $project : {"age" : {$subtract : ["$age", {$mod : ["$age",1]}]}}},
    { $group : { _id : "$age", Total : { $sum : 1} } },
    { $sort : { "Total" : -1 } }
])

关于mongodb - Mongo聚合框架: group users by age,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15496780/

10-16 12:49