我想用 Ruby 尝试 Mongo。我连接,选择了集合,我可以从 MongoDB 查询数据。
irb(main):049:0> coll.find_one({:x=>4})
=> #<BSON::OrderedHash:0x3fdb33fdd59c {"_id"=>BSON::ObjectId('4f8ae4d7c0111ba6383cbe1b'), "x"=>4.0, "j"=>1.0}>
irb(main):048:0> coll.find_one({:x=>4}).to_a
=> [["_id", BSON::ObjectId('4f8ae4d7c0111ba6383cbe1b')], ["x", 4.0], ["j", 1.0]]
Run Code Online (Sandbox Code Playgroud)
但是当我检索 BSON 哈希时如何访问属性?我需要这样的东西:
data.x
=> 4
Run Code Online (Sandbox Code Playgroud)
to_hash方法给了我相同的 BSON::OrderedHash... :(
当你说 时coll.find_one({:x=>4})
,你会得到一个 BSON::OrderedHash 返回,你可以像普通哈希一样访问它:
h = coll.find_one(:x => 4)
puts h['x']
# 4 comes out unless you didn't find anything.
Run Code Online (Sandbox Code Playgroud)
如果你使用 fullfind
而不是find_one
,你会得到一个 MongoDB::Cursor ,它是一个 Enumerable ,所以你可以像任何其他集合一样迭代它;当您迭代时,游标将返回 BSON::OrderedHash 实例,因此您可以执行以下操作:
cursor = coll.find(:thing => /stuff/)
cursor.each { |h| puts h['thing'] }
things = cursor.map { |h| h['thing'] }
Run Code Online (Sandbox Code Playgroud)
如果您想要对象而不是哈希,那么您必须自己用对象包装 MongoDB::Cursor 和 BSON::OrderedHash 实例(可能通过Struct)。
归档时间: |
|
查看次数: |
2402 次 |
最近记录: |