使用Mongoid和Ruby查询过去30天的日期范围?

Sea*_*udt 13 ruby date range mongodb mongoid

如何使用Mongoid和Ruby查询日期范围(比如说从现在开始的最近30天)?

我需要最终得到如下所示的数组或哈希:

{
    15 => 300,
    14 => 23,
    13 => 23
    ...
    30 => 20  # Goes over into previous month
    28 => 2
}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用DateTime实例以及unix时间戳整数字段存储每个文档.

上述哈希中的键是天数,值是这些天的所有销售额的总和.

有任何想法吗?

tom*_*eld 28

有一种更简单的方法:

Sale.where(created_at: (30.days.ago..Time.now))
Run Code Online (Sandbox Code Playgroud)

调整时间范围以适应.


Dan*_*aly 21

以下是如何在rubyland中完成所有操作:

sales_by_date = Hash.new(0)

Sale.where(:created_at.gte => (Date.today - 30)).order_by(:created_at, :desc).each do |s|
  sales_by_date[s.created_at.strftime("%m-%d")] += 1
end
Run Code Online (Sandbox Code Playgroud)

这将创建一个带有"月 - 日"密钥的哈希,原因是某些月份少于30天,如果查询始终为30,则会导致密钥冲突.

如果您想要不同的范围,请更改查询:

# Between 10 and 20 days ago
start_day       = 10
end_day         = 20

Sale.where(:created_at.gte => (Date.today - end_day), :created_at.lte => (Date.today - start_day))
Run Code Online (Sandbox Code Playgroud)

更改created_at为日期时间字段的名称.


小智 6

您还可以使用以下between方法编写查询:

Sale.between(created_at: (30.days.ago..Time.now))
Run Code Online (Sandbox Code Playgroud)