【问题标题】:Mongoid / Moped Date Type Insertion FailureMongoid / Moped 日期类型插入失败
【发布时间】:2013-10-13 03:59:23
【问题描述】:

问题涉及 mongoid / moped DATE 类型插入。 我的代码如下

s=Moped::Session::new(["127.0.0.1"])
s.use "test"
s["a"].insert mydate: Date.strptime("10/02/2014","%m/%d/%Y")

引发错误

# => undefined method `__bson_dump__' for Thu, 02 Oct 2014:Date

为什么 Date 类型无法通过 moped 插入 mongoDB? 我很确定 mongoDB 确实支持 Date 类型。

感谢您的帮助。

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid moped


    【解决方案1】:

    MongoDB 支持 BSON 类型的 UTC 日期时间,在 Moped 中,这映射到 Ruby 时间,而不是日期。 但是,您的代码有一个非常简单的解决方案,因为 Mongoid 提供了 Date#mongoize 便利功能。 希望这是您想要的并且对您有所帮助。

    date_mongoize.rb

    require 'moped'
    require 'mongoid'
    
    s=Moped::Session::new(["127.0.0.1"])
    s.use "test"
    s["a"].find.remove_all
    s["a"].insert mydate: Date.strptime("10/02/2014","%m/%d/%Y").mongoize
    p s["a"].find.to_a
    

    $ ruby​​ date_mongoize.rb

    [{"_id"=>"5272a943fa23bace4f7650e3", "mydate"=>2014-10-02 00:00:00 UTC}]
    

    【讨论】:

    • 这就像魔法一样!我从没想过mongodb中的日期不是ruby中的日期,而是时间。 Mongoize 方法按预期工作。谢谢。
    • 不客气,很高兴为您提供帮助。如果您需要 MongoDB 中类型的更多详细信息,BSON 规范是一个很好的参考 - bsonspec.org
    猜你喜欢
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2021-02-03
    • 2018-10-27
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多