【问题标题】:MongoMapper: finding all documents created on a specified dateMongoMapper:查找在指定日期创建的所有文档
【发布时间】:2011-11-21 23:10:33
【问题描述】:

我需要编写一个查询来查找在指定日期创建的所有文档。

假设日期是今天。

我试过这个:

Document.all(:created_at => Date.parse(Time.now.strftime('%Y/%m/%d')))

但我得到了:

无法将 Date 类的对象序列化为 BSON。

感谢您的帮助。

更新 这个链接解释了如何做到这一点Date Range Queries With MongoMapper。

Document.count( :created_at => { '$gt' => 2.days.ago.midnight, '$lt' => 1.day.ago.midnight } )

【问题讨论】:

  • 上面的链接失效了。

标签: ruby mongodb mongomapper


【解决方案1】:

更新:此链接说明了如何操作Date Range Queries With MongoMapper。

Document.count( :created_at => { '$gt' => 2.days.ago.midnight, '$lt' => 1.day.ago.midnight } )

【讨论】:

    【解决方案2】:

    您的:created_at 是一个日期(如“具有日期和时间组件的JavaScript 样式日期”),对吗?您需要找出相关日期的 UTC 边界,为这些边界构建 Time 实例,然后搜索这些时间之间的所有内容。

    假设您的本地时区配置正确,并且您想要在 2011 年 11 月 21 日创建的所有内容,那么这样的事情应该可以让您到达那里:

    start_time = Time.new(2011,11,21, 0,0,0).utc
    end_time   = Time.new(2011,11,22, 0,0,0).utc
    docs       = Document.where(:created_at => { :$gte => start_time }).
                          where(:created_at => { :$lt  => end_time   })
    

    您也可以使用 Time.new(2011, 11, 21).utc 和 Time.new(2011, 11, 22).utc,但我喜欢使用额外的零来提醒我,我并不是真的只在使用日期。

    【讨论】:

      【解决方案3】:

      只需改用Time.now。 ruby 驱动程序知道如何处理 Time 对象。

      doc = {:created_at => Time.now}
      

      或

      doc = {:created_at => Time.utc(12,1,12)} # year, month, day
      

      然后,您可以测试文档是否会序列化而不会在 irb 中引发错误,如下所示:

      require 'bson'
      
      BSON.serialize(doc)
      

      如果出现错误,请重试。如果它吐出一个序列化的 bson 对象,你就可以开始了!

      如果好奇,可以查看mongomapper驱动here中to_mongo方法的源码

      【讨论】:

        【解决方案4】:

        使用@mu-is-to-short 指出的技术来创建日期。

        但是where语句的格式可以更简单:

        date = Time.new(2021,1,24, 0,0,0).utc
        docs = Document.where(:updated_at.gte => date).all
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          相关资源
          最近更新 更多