我在我的项目中使用MongoDB和Mongoid。订购时遇到一些困难" Time"现场数据。
如您所知,尽管您在Mongoid文档中将字段类型设置为Time
,但时间数据将以此格式存储(请注意,我使用+2小时偏移量来获取自己的时区' s时间而不是UTC):
Mon, 31 Dec 2012 08:30:00 EET +02:00
我不确定我是否遗漏了一些东西,但这就是我发生的事情。
我想在我的一个视图中使用Time
数据。我需要通过Hour:Minute
格式对一些相关的东西进行排序。我不希望Rails处理现场数据的DATE部分。因为无论何时将新的Time
记录插入到数据库中,它都会将当天信息视为当前日期。
因为它为每个新的Time
记录保存了CURRENT DAY,所以当我尝试order_by("hour DESC")
时,总是首先检索新记录,尽管HOUR部分数据更大!
First data:
=> Tue, 27 Nov 2012 19:50:00 EET +02:00
Second data:
=> Mon, 24 Dec 2012 18:45:00 EET +02:00
如你所知,通常情况下,19:50大于18:45。但在这种情况下,由于Rails需要day
信息进行计算,18:45看起来比19:50更大!
那么这个问题的解决方法是什么?
感谢advence。
答案 0 :(得分:2)
我在Mongoid的问题列表中找到了答案: https://github.com/mongoid/mongoid/issues/1169
那真的很受欢迎......
如果我理解得很好,Time
字段类型完全没用! DateTime
和Time
之间有什么区别呢?
您甚至无法仅在Time
字段内比较小时和分钟。
为你的工作屏住呼吸......
不要使用Time
字段类型!只需使用String
并通过该程序比较小时和日期。
Person.where(:time.gt => "13:00")
如果有人可以解释这种情况,我会很高兴。
答案 1 :(得分:1)
存储时间的最佳方式是在整数字段中的seconds_since_midnight。然后你可以正常排序。
field :time, type: Integer
validates :time, presence: true, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 86399 }
http://api.rubyonrails.org/classes/DateTime.html#method-i-seconds_since_midnight http://api.rubyonrails.org/classes/Time.html#method-i-seconds_since_midnight