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,从时间开始。我已经编辑了我的问题以包含代码。关于不需要年复一年的问题,你是对的。实际上,这个代码段是通用的,所以我可以输入任意范围的日期。为了避免分心,这个问题被简化了:)至于总用户,我会再给它一个小时,然后再报告。