我正在使用Rails v4和MongoDB。我有一个列'dob
日期类型,我想找到即将到来的生日?请帮忙。
我尝试过如下但没有用:
scope :upcoming_birthdays, ->
{
where({"dob.strftime('%m').lte" =>
(Date.today+3.days).month,
"dob.strftime('%d').lte" =>(Date.today+3.days).day})
}
答案 0 :(得分:0)
在mongo中,您可以使用聚合框架
db.collection.aggregate([
{$project: {_id: 1, month: {$month: '$dob'}, day: {$dayOfMonth: '$dob'}}},
{$match: {month: 9, day: 14}} ])
使用您想要的实际$match
条件。
所以你应该抽出你的范围来实现它,或者实现类方法而不是范围。
答案 1 :(得分:0)
最后我得到了解决方案,但它必须重新考虑。在这里,我今天和接下来的两天生日用户详细信息。
pro = {:day => {:$dayOfMonth => '$dob'}, :month => {:$month => '$dob'}, :year => {:$year => '$dob'} }
today = Date.today
birth_dates = [today.day, (today+1.day).day, (today+2.days).day ]
birth_months = [today.month, (today+1.day).month, (today+2.days).month ].uniq
mat = {day: { '$in' => birth_dates } , month: { '$in' => birth_months } }
uids = User.collection.aggregate([{:$project => pro }, {:$match => mat }]).map{ |h| h["_id"] }
birth_users = User.find(uids, :order => :dob)
但问题是,这里的dob字段是可选的,因此导致以下错误
失败,错误16006:异常:无法从BSON类型EOO转换为日期
任何人都建议。
谢谢, 普拉萨德