如何将BSON :: Binary反序列化为ruby哈希?

时间:2013-05-23 20:21:42

标签: ruby mongodb anemone

我正在使用Anemone将已抓取的页面存储到MongoDB中。除了在从MongoDB检索页面时访问页眉时,它主要起作用。

当我调用collection.find_one("http://stackoverflow.com")时,我会从数据存储中获取正确的对象,但我无法识别标题。

Anemone将标题存储为哈希,理论上,在检索文档之后,我应该可以做类似的事情

document["headers"]["content-type"]

但这不起作用,因为document["headers"]是BSON :: Binary。

puts document["headers"]

显示文本和二进制字符的混合。

如何从MongoDB返回的二进制数据中创建可用的ruby哈希对象?

编辑:我还没有解决原来的问题,但能够修改Anemone以便我可以为我加载数据,这似乎有效:

class NewMongo < Anemone::Storage::MongoDB
    def initialize(mongo_db, collection_name)
        @db = mongo_db
        @collection = @db[collection_name]
        #Do not delete the collection! I need it!
        #@collection.remove
        @collection.create_index 'url'
    end
end

然后是......

repo = NewMongo.new(db, "pages")
repo.each db |url, page|
    puts page.content_type
end

1 个答案:

答案 0 :(得分:1)

如果数据是由Anemone存储后端以二进制格式存储的,除非您知道格式或它们提供了反序列化器,否则您无能为力。听起来这对于存储标题来说是一个糟糕的选择,因为散列对它来说是更自然的形式。