在Mongoid中,Date,Time,DateTime和TimeWithZone字段类型是否有任何差异?

 热情的海浪公主 发布于 2023-02-09 19:29

该文档提到了四种与时间相关的字段类型(http://mongoid.org/en/mongoid/docs/documents.html#fields).在其他数据库中,我可以看到这些字段将如何成为数据库中的差异类型,但对于MongoDB而言,它们都不是日期类型?这只是为了与ActiveRecord保持一致吗?

1 个回答
  • 它们之间几乎没有区别,它们都包含时间类型.您可以更改DateTime,Date或TimeWithZone以在从mongo反序列化后获取此类型的实例.

    Mongoid扩展了这个类,为数据绑定添加了demongoize/mongoize方法.所以唯一的区别在于实施.

    所以时间实施

    def demongoize(object)
      return nil if object.blank?
      object = object.getlocal unless Mongoid::Config.use_utc?
      if Mongoid::Config.use_activesupport_time_zone?
        object = object.in_time_zone(Mongoid.time_zone)
      end
      object
    end
    
    def mongoize(object)
      return nil if object.blank?
      begin
        time = object.__mongoize_time__
        if object.respond_to?(:sec_fraction)
          ::Time.at(time.to_i, object.sec_fraction * 10**6).utc
        elsif time.respond_to?(:subsec)
          ::Time.at(time.to_i, time.subsec * 10**6).utc
        else
          ::Time.at(time.to_i, time.usec).utc
        end
      rescue ArgumentError
        EPOCH
      end
    end
    

    日期实施

    def demongoize(object)
      ::Date.new(object.year, object.month, object.day) if object
    end
    
    
    def mongoize(object)
      unless object.blank?
        begin
          time = object.__mongoize_time__
          ::Time.utc(time.year, time.month, time.day)
        rescue ArgumentError
          EPOCH
        end
      end
    end
    

    您可以查看其他实现

    https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/date.rb#L46 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/date_time .rb#L49 https://github.com/mongoid/mongoid/blob/master/lib/mongoid/extensions/time.rb#L48 https://github.com/mongoid/mongoid/blob/master/lib/mongoid /extensions/time_with_zone.rb#L32

    2023-02-09 19:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有