Mongo紅寶石驅動程序似乎將您的結果放入散列中,並將字符串作爲鍵。有沒有辦法告訴它將鍵轉換爲符號?使用符號作爲mongo的密鑰獲取散列在軌道中
回答
根據FAQ,儘管Mongo中有一個符號類型,並且可以將值存儲在值中,但BSON格式指定鍵必須是字符串。
如果您的Hash
使用字符串鍵入,並且您希望能夠使用Symbol
作爲鍵來訪問其值,則可以使用HashWithIndifferentAccess
。如果你不使用Rails,你可以通過ActiveSupport
gem來獲得這個類。
my_hash = { 'name' => 'Joe', 'email' => '[email protected]' }
my_hash = HashWithIndifferentAccess.new my_hash
puts my_hash[:name] # "Joe"
有趣...它如何在內部存儲它們?如果你向Mongo傳遞一個密鑰,密鑰是字符串還是符號? – 2011-02-27 20:37:08
[這是代碼](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
這非常整齊!在這個特定的用例中可以很好地工作。 – 2011-03-02 00:57:35
- 1. 從JavaScript散列中獲取密鑰
- 2. 在軌道中使用散列號創建活動記錄
- 3. 使用符號作爲散列鍵
- 4. Facebook的密鑰散列不起作用
- 5. 獲取散列表中密鑰列表的時間複雜度?
- 6. 失敗的Travis CI在軌道中使用密鑰時測試
- 7. 如何獲取散列perl哈希中的密鑰數量?
- 8. 僅使用密鑰創建散列
- 9. 使用散列表僅存儲密鑰?
- 10. 無效密鑰散列密鑰散列不匹配任何存儲的密鑰散列
- 11. Android Facebook錯誤:無效密鑰散列。密鑰散列與任何存儲的密鑰散列不匹配
- 12. JSON字符串到軌道散列
- 13. Facebook的密鑰散列爲Android
- 14. 密鑰散列:Facebook的SDK
- 15. Android的密鑰散列
- 16. Facebook的Android密鑰散列
- 17. 使用純文本的散列作爲加密密鑰安全嗎?
- 18. 使用redis獲取一系列密鑰?
- 19. 如何使用PCLCrypto中的現有密鑰來散列密碼?
- 20. Mongo Mapper的軌道
- 21. 在VBA宏中使用符號#(散列)
- 22. R,從鍵值中獲取密鑰(散列)
- 23. 替代散列SSN作爲MySQL中的密鑰
- 24. 爲hbase中散列的部分密鑰製作停止鍵
- 25. 在散列表中修改密鑰?
- 26. 在軌道中使用類似對象的散列
- 27. 使用參數散列保存在軌道4.0中的記錄
- 28. 作爲數組的密鑰散列 - 如何變成一個正常的散列?
- 29. 從密鑰獲取字符
- 30. 散列函數和密鑰
這真的不是「鐵軌」方式。我想知道他們爲什麼做出這個決定。使用符號作爲鍵非常方便... – etang 2011-03-01 20:54:30
@etang - BSON與Rails完全分離,這就是爲什麼他們沒有按照「rails」的方式來做,或許你需要一個rails-mongo gem? :) – codecraig 2012-02-24 14:48:15