我正在使用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
答案 0 :(得分:1)
如果数据是由Anemone存储后端以二进制格式存储的,除非您知道格式或它们提供了反序列化器,否则您无能为力。听起来这对于存储标题来说是一个糟糕的选择,因为散列对它来说是更自然的形式。