我有一个模型(事件),有五年的记录(每天一条记录)。我需要一个方法,当传递一个日期对象,如2011-12-25 00:00:00时,将向我显示12月25日发生的所有记录(查询:created_at列),无论年份如何或时间过去了。
我尝试了以下查询来检索在给定日期之间的数据,但是在年度更改之后我遇到了一个问题,我的查询无法检索记录。例如记录sdate =“1-06-2013”和edate =“2-2-2014”我想要1月1日的记录,那么我该如何获得这些数据。
db.events.find(“this.sdate.getMonth()> 6&& this.edate.getMonth()< 6”);
我需要使用Mongoid而不是ActiveRecord
进行精确的跟随查询Model.where(“MONTH(created_at)=?和DAY(created_at)=?”,somedate.month,somedate.day)
答案 0 :(得分:2)
编辑:(我的第一个回答错过了它应该忽略年份和时间的事实)
使用聚合管道:
project = { '$project' => {
'day' => { '$dayOfMonth' => '$created_at' },
'month' => { '$month' => '$created_at' }
}
}
match = { '$match' => { 'day' => 25, 'month' => 12 } }
Events.collection.aggregate([project, match])
这应该返回一个哈希数组,其中包含日期和月份的预计值以及匹配事件的_ids。然后,您可以将它们映射回事件或您需要做的任何事情。
答案 1 :(得分:0)
你可以尝试做一些Javascripting查询
db.mydatabase.mycollection.find({$where : 'return this.date.getMonth() == 11'})
但我永远不会这样做。我要做的是将月 - 日存储在一个字段中,在其上有一个索引,并具有更快的查询。否则你将扫描所有dos。