我有一个用户表"已创建"日期字段。现在我想知道上周每天创建了多少新用户,以及每天结束时(从开始时间开始)的总用户数。
例如:
{
{
day: 27,
new_users: 5,
total_users: 100
}, {
day: 28,
new_users: 7,
total_users: 107
}, {
day: 29,
new_users: 2,
total_users: 109
}
}
我已经通过简单的分组和求和获得了new_users部分。下面的代码是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}
}]
)
如何在结果中获取total_users?
答案 0 :(得分:0)
你的尝试越来越近了。有一件事是,既然你是从上周过滤到自己开始的,那么你就不需要关心这一年或一个月了。
注意:我不知道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}
}
这会得到day
和newUsers
,但它不会得到你的总数。我实际上并不是单个查询中的可能。一种替代方案可能是为每个用户提供一个唯一的号码,并且只取当天的最大数字。