我有DOB用户模型作为波纹管生日查询不工作,如果DOB是空
field :dob, :type => Date
我想找到用户的生日是今天。我试过
User.collection.aggregate([
{ "$project" => {
"dob" => {
"day" => { "$dayOfMonth" => "$dob" },
"month" => { "$month" => "$dob" }
}
}},
{ "$match" => {
"dob.day" => Time.now.day,
"dob.month" => Time.now.month
}}
])
它只在所有用户都有dob时才起作用。如果任何一个用户有dob = null,则它不起作用。
收到此错误
Moped::Errors::OperationFailure: The operation: #<Moped::Protocol::Command
@length=249
@request_id=2
@response_to=0
@op_code=2004
@flags=[:slave_ok]
@full_collection_name="api_development.$cmd"
@skip=0
@limit=-1
@selector={:aggregate=>"users", :pipeline=>[{"$project"=>{"dob"=>{"day"=>{"$dayOfMonth"=>"$dob"}, "month"=>{"$month"=>"$dob"}}}}, {"$match"=>{"dob"=>{"$ne"=>nil}, "dob.day"=>30, "dob.month"=>10}}]}
@fields=nil>
failed with error 16006: "exception: can't convert from BSON type NULL to Date"
有什么建议?
什么意思是“不工作”?没有结果或错误? – 2014-10-30 16:06:20
@ChristianStrempfer,我更新了错误 – Alpesh 2014-10-30 16:11:40