Ruby on rails MongoDB计数(按日期和截止日期)
我有一个带有“创建”日期字段的用户表。现在我想知道上周每天创建了多少新用户,以及每天结束时(从时间开始)的总用户数 例如:Ruby on rails MongoDB计数(按日期和截止日期),ruby-on-rails,mongodb,mongoid,aggregation-framework,Ruby On Rails,Mongodb,Mongoid,Aggregation Framework,我有一个带有“创建”日期字段的用户表。现在我想知道上周每天创建了多少新用户,以及每天结束时(从时间开始)的总用户数 例如: { { day: 27, new_users: 5, total_users: 100 }, { day: 28, new_users: 7, total_users: 107 }, { day: 29, new_users: 2, total_users: 109 } } 我已经通过
{
{
day: 27,
new_users: 5,
total_users: 100
}, {
day: 28,
new_users: 7,
total_users: 107
}, {
day: 29,
new_users: 2,
total_users: 109
}
}
我已经通过使用简单的分组和求和得到了新的用户部分。下面的代码是mongoid/Ruby
results = User.collection.aggregate(
[{
"$match" => {
created: { "$gte" => 1.week.ago.beginning_of_day, "$lte" => Time.now }
}
},
{
"$group" => {
_id: {
year_joined: { "$year" => "$created" },
month_joined: { "$month" => "$created" },
day_joined: { "$dayOfMonth" => "$created" }
},
count: { "$sum" => 1 }
}
},
{
"$sort" => {"_id.year_joined" => 1, "_id.month_joined" => 1, "_id.day_joined" => 1}
}]
)
如何在结果中获得用户总数?您的尝试已接近尾声。有一件事是,既然你一开始就在筛选最后一周的内容,那么你就不需要关心年份或月份 注意:我不知道ruby,所以我像在mongo shell中一样编写它
{
"$match" => {
created: { "$gte" => 1.week.ago.beginning_of_day, "$lte" => Time.now }
}
},
{
$group: {
_id: {"$dayOfMonth": "$created" },
day: {"$dayOfMonth": "$created" },
newUsers: { "$sum": 1}
}
},
{
"$sort" => {"_id.year_joined" => 1, "_id.month_joined" => 1, "_id.day_joined" => 1}
}
这将为您提供
日
和新用户
,但不会为您提供总数。实际上,我不认为这在一个查询中是可能的。另一种选择可能是给每个用户一个唯一的号码,只取当天的最大号码。(1)您能告诉我们您尝试了什么吗?我们不想为你写所有的代码。(2) 当你说总用户数时,你是指从时间开始到上周开始的总用户数吗?@DavidGrinberg,从时间开始。我已经编辑了我的问题以包含代码。关于不需要年复一年的问题,你是对的。实际上,这个代码段是通用的,所以我可以输入任意范围的日期。为了避免分心,这个问题被简化了:)至于总用户,我会再给它一个小时,然后再报告。