2

我正在使用 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
4

1 回答 1

1

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

于 2013-05-24T16:21:35.107 回答