【问题标题】:Mongoid query only when field exist仅当字段存在时才进行 Mongoid 查询
【发布时间】:2014-03-05 08:14:40
【问题描述】:

我有一个包含文档的新闻集,可能(或可能没有)活动时间有限。

我有 3 个字段表明新闻是否有效。活动的、有效的_从、有效的_到。通常我会做这种查询:

其中 active = true 和(valid_from = null 或 valid_from Time.now)。好的。 Time.now 只是红宝石,但我希望你能理解。

这可以用 Mongoid 实现吗?如何实现?

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    您可以尝试以下方法:

    Model.where(active: true)
         .any_of({valid_from: nil}, {:valid_from.lt => Time.now})
         .any_of({valid_to: nil}, {:valid_to.gt => Time.now})
    

    【讨论】:

    • 关闭。但生成的查询如下所示:"$or"=>[{"valid_from"=>nil},{"valid_from"=>{"$lt"=>2014-03-05 10:45:15 UTC}}, {"valid_to"=>nil}, {"valid_to"=>{"$gt"=>2014-03-05 10:45:15 UTC}}]}
    • 上升。还在学习编辑器:关闭。但生成的查询如下所示:"$or"=>[{"valid_from"=>nil},{"valid_from"=>{"$lt"=>2014-03-05 10:45:15 UTC}}, {"valid_to"=>nil}, {"valid_to"=>{"$gt"=>2014-03-05 10:45:15 UTC}}] 这是错误的。大概应该是这样的:"$or"=>[{"valid_from"=>nil},{"valid_from"=>{"$lt"=>2014-03-05 10:45:15 UTC}}] , "$or"=>[ {"valid_to"=>nil}, {"valid_to"=>{"$gt"=>2014-03-05 10:45:15 UTC}}] by TheR
    • 感谢您指路。此代码按预期工作。 Model.where(active: true) .and({"$or" => [{:valid_from => nil}, {:valid_from.lt => Time.now}]}, {"$or" => [{ :valid_to => nil}, {:valid_to.gt => Time.now}]}) by TheR
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多