【问题标题】:Strange Behavior with mongoid date range query. - Rails 3使用 mongoid 日期范围查询的奇怪行为。 - 导轨 3
【发布时间】:2011-07-22 06:24:24
【问题描述】:

我正在运行非常奇怪的日期范围查询问题。当我使用 DateTime.now.utc 选项查询数据库时,DateTime.now 的查询日期与我当前的 DateTime.now 不同(即在控制台上返回的日期。)

我的 mogoid.yml 使用-

use_utc: true

我有这样的命名范围 -

scope :running_auctions, {
       :where => { :end_time.gt => DateTime.now.utc },
       :order_by => [:end_time, "ASC"]
 }

在控制台上我可以做到这一点 -

加载开发环境(Rails 3.0.7)

irb(main):001:0> Auction.running_auctions
=> #<Mongoid::Criteria
selector: {:end_time=>{"$gt"=>Fri Jul 22 00:42:38 UTC 2011}},
options:  {:sort=>[:end_time, "ASC"]},
class:    Auction,
embedded: false>

请注意,我的日期是 2011 年 7 月 22 日星期五 00:42:38 UTC

irb(main):002:0> DateTime.now
=> Fri, 22 Jul 2011 11:42:56 +0530

irb(main):003:0> DateTime.now.utc
=> Fri, 22 Jul 2011 06:12:59 +0000

请注意,我的约会时间是 2011 年 7 月 22 日星期五 06:12:59 +0000

是什么让查询日期早于实际当前日期? mogoid 或 mongodb 在那里做缓存吗? 如果我遗漏了什么,请告诉我。

更新

Loading development environment (Rails 3.0.7)
irb(main):001:0> Auction.running_auctions(DateTime.now.utc)
=> #<Mongoid::Criteria
 selector: {:end_time=>{"$gt"=>Fri Jul 22 01:21:53 UTC 2011}},
 options:  {:sort=>[:end_time, "ASC"]},
 class:    Auction,
 embedded: false>

irb(main):002:0> DateTime.now.utc
=> Fri, 22 Jul 2011 06:52:03 +0000

【问题讨论】:

  • 你能用范围代码和对范围的调用来更新问题吗?

标签: ruby-on-rails ruby mongodb mongoid


【解决方案1】:

你必须在那里使用 lambda。截至目前,DateTime.now.utc 在应用程序启动时计算并与应用程序代码一起缓存。

你需要把你的范围写成:

scope :running_auctions, lambda {
  {
    :where => { :end_time.gt => DateTime.now.utc },
    :order_by => [:end_time, "ASC"]
  }
}

【讨论】:

  • 非常感谢 Rubish,你拯救了我的一天。
  • 我将日期传递给范围,如 running_auctions(DateTime.now.utc) 并像 lambda{|date| 一样缓存它..otherstuff..} 对我有用.. 运行相同的代码没有给出当前日期,但只给出旧日期..
  • 您不需要传递日期。逐字逐句编写范围应该可行。
  • 是的,您是正确的,但是您能说出 UTC 2011 和 +0000 格式日期之间的区别吗?我已经编辑了我的代码以显示我的意思。在控制台上看到我的 DateTime.now.utc 是不同的,即 +0000 格式,在查询中它是 UTC 2011 格式。
  • UTC 和 +0000 表示相同,例如 "Asia/Kolkata" 和 +0530 表示相同。它们只是不同的格式,可能是因为一种使用您的应用程序默认格式,另一种由 mongoid 设置。但是你的更新仍然有不同的日期时间!!
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2012-09-21
  • 1970-01-01
  • 2012-12-16
相关资源
最近更新 更多