【问题标题】:Getting hash with symbol as keys for mongo in rails在rails中获取带有符号的哈希作为mongo的键
【发布时间】:2011-02-25 22:32:40
【问题描述】:

Mongo ruby​​ 驱动程序似乎将您的结果放入以字符串为键的散列中。有没有办法告诉它把键转换成符号?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb


    【解决方案1】:

    根据FAQ,即使Mongo中有符号类型,并且可以将符号存储在值中,但BSON格式规定键必须是字符串。

    【讨论】:

    • 这真的不是“rails”方式。我想知道他们为什么做出这个决定。使用符号作为键更方便...
    • @etang - BSON 与 Rails 完全分开,这就是为什么他们没有以“rails”方式来做,也许你需要一个 rails-mongo gem? :)
    【解决方案2】:

    如果您有一个使用字符串作为键的Hash,并且您希望能够使用Symbols 作为键来访问其值,则可以使用HashWithIndifferentAccess。如果你没有使用 Rails,你可以通过 ActiveSupport gem 获取这个类。

    my_hash = { 'name' => 'Joe', 'email' => 'joe@schmoe.com' }
    my_hash = HashWithIndifferentAccess.new my_hash
    puts my_hash[:name] # "Joe"
    

    【讨论】:

    • 有趣...它如何在内部存储它们?如果您将一个传递给 Mongo,键是字符串还是符号?
    • Here's the code。看起来它在内部使用Strings 来存储数据,当您尝试使用Symbol 访问值时,它会将其转换为String 以查找数据。因此,密钥存储为Strings,用于迭代密钥等。
    • 这很漂亮!在这个特定的用例中会很好地工作。
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2012-02-12
    • 2011-07-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多