我如何使用Mongoid和Ruby查询日期范围(比如从现在起的最后30天)?

我需要得到一个数组或散列,如下所示:

{
    15 => 300,
    14 => 23,
    13 => 23
    ...
    30 => 20  # Goes over into previous month
    28 => 2
}

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

上面散列中的键是天,值是这些天所有销售额的总和.

有什么 idea 吗?

推荐答案

以下是如何在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

这将创建一个带有"month day"键的散列,原因是某些月份的天数少于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))

created_at改为datetime字段的任何名称.

Mongodb相关问答推荐

我无法将文档发送到我的MongoDB集合,因为它告诉我使文档无效

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

查询有关 Go 项目中对象数组的 MongoDb 集合

MongoDB - 文档中多个数组大小的总和

mongoose默认值等于其他值

如何使用sailsjs v0.10连接mongodb?

MongoDB $或PHP中的查询

Mongoose Schema vs Mongo Validator

Mongoose 的保存回调是如何工作的?

使用 MongoDB 进行嵌套分组

mongo - Ruby连接问题

如何在 Ubuntu 上安装 mongodb-clients 最新版本?

错误:需要数据和盐参数

mongoose中的 Date.now() 和 Date.now 有什么区别?

按 id 删除记录?

是否可以在 Mongodb 中的两个数据库之间进行 $lookup 聚合?

MongoDB:删除唯一约束

AsQueryable 方法是否在新的 Mongodb C# 驱动程序 2.0rc 中离开?

有没有办法防止 MongoDB 向集合名称添加复数形式?

从 Grunt 任务中启动 MongoDB