【发布时间】:2014-10-30 14:23:17
【问题描述】:
我的用户模型的 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"
有什么建议吗?
【问题讨论】:
-
什么是“不工作”?没有结果或错误?
-
@ChristianStrempfer,我用错误更新了问题
标签: ruby-on-rails mongodb