2011-02-25 38 views

回答

6

根據FAQ,儘管Mongo中有一個符號類型,並且可以將值存儲在值中,但BSON格式指定鍵必須是字符串。

+0

這真的不是「鐵軌」方式。我想知道他們爲什麼做出這個決定。使用符號作爲鍵非常方便... – etang 2011-03-01 20:54:30

+2

@etang - BSON與Rails完全分離,這就是爲什麼他們沒有按照「rails」的方式來做,或許你需要一個rails-mongo gem? :) – codecraig 2012-02-24 14:48:15

3

如果您的Hash使用字符串鍵入,並且您希望能夠使用Symbol作爲鍵來訪問其值,則可以使用HashWithIndifferentAccess。如果你不使用Rails,你可以通過ActiveSupport gem來獲得這個類。

my_hash = { 'name' => 'Joe', 'email' => '[email protected]' } 
my_hash = HashWithIndifferentAccess.new my_hash 
puts my_hash[:name] # "Joe" 
+0

有趣...它如何在內部存儲它們?如果你向Mongo傳遞一個密鑰,密鑰是字符串還是符號? – 2011-02-27 20:37:08

+0

[這是代碼](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/hash_with_indifferent_access.rb)。看起來它在內部使用'String'來存儲數據,當你嘗試使用'Symbol'訪問值時,它會將其轉換爲'String'來查找數據。所以密鑰存儲爲'String's用於迭代密鑰等。 – 2011-02-27 22:11:21

+0

這非常整齊!在這個特定的用例中可以很好地工作。 – 2011-03-02 00:57:35