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

推荐答案

它们之间几乎没有区别,都是包装时间类型.

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

Mongodb相关问答推荐

从MongoDB中的一个非空字段获取值

MongoDB聚合$group阶段$top与$first在大型数据集上的效率

在mongo聚合管道的组阶段排除字段,但在最后将其包含在内

MongoDB - 将属性添加到数组中的对象(如果不存在)

MongoDB:检测所有重叠事件(开始/结束日期)?

通过 docker 运行的 MongoDB 服务器无法互相看到(名称解析中的临时故障)

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

嵌套数组 $unwind 和 $group 在 mongoDB 中重新组合在一起

MongoDB 查询以包含多个字段的最常见值的计数

MongoDB C# 驱动程序 - 如何将 _id 存储为 ObjectId 但映射到字符串 Id 属性?

指定字段对于 MongoDB 是transient瞬态的,但对于 RestController 不是

MongoDB 的 BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M=") 中的0是什么意思?

Mongoose 中不同集合的相同模式

MongoDB中超过2GB的数据库

Mongo: query by key one level deep

在 mongodb 中插入当前日期时间

我们如何使用spring boot为mongodb创建自动生成的字段

Java + MongoDB:更新文档中的多个字段

按 id 删除记录?

Mongo 条件为key doesn't exist?