Mongoid查询中的日期

dem*_*mas 6 ruby-on-rails mongodb mongoid

我有一个模特:

class SimpleAction
  include Mongoid::Document
  field :set_date, :type => Date
Run Code Online (Sandbox Code Playgroud)

我收集了一些数据:

{"_ id":ObjectId("4f6dd2e83a698b2518000006"),"name":"lost","notes":"","set_date(1i)":"2012","set_date(2i)":"3"," set_date(3i)":"25","set_date(4i)":"13","set_date(5i)":"57","duration":15,"todo":"4"}

您可以在五个字段中看到mongoid存储日期 - set_date(ni).

我有两个问题:

  • 如何通过mongo控制台客户端中的set_date字段过滤数据?像这样的东西:

    db.simple_actions.find({ set_date : { "$lte" : new Date() } })
    
    Run Code Online (Sandbox Code Playgroud)

    我的查询没有返回任何数据.

  • 如何通过Rails控制器中的set_date字段过滤数据?像这样的东西:

    @simple_actions = SimpleAction.where(:set_date => { '$lte' => Date.today })
    
    Run Code Online (Sandbox Code Playgroud)

rfu*_*duk 14

我建议不要使用Date,而是DateTime:

field :set_date, :type => DateTime
Run Code Online (Sandbox Code Playgroud)

现在不仅将它存储在1个字段中,如下所示:

"set_date" : ISODate("2012-03-14T17:42:27Z")
Run Code Online (Sandbox Code Playgroud)

但Mongoid会正确处理您想要的各种查询转换:

SimpleAction.where( :set_date => { :$lte => Date.today } )
Run Code Online (Sandbox Code Playgroud)