如何使用Ruby从MongoDB返回的BSON文档中提取值
解决Ruby操作MongoDB提取文档Value的问题
嘿,这个问题其实很好解决——你没必要把Mongo返回的文档转成字符串再处理哦!
首先要明确:client[:inventory].find 返回的迭代对象里,每个 doc 本质是BSON::Document(Ruby Hash的子类),完全可以像操作普通哈希一样直接取值,根本不用折腾字符串格式!
直接修改你的代码
把原来的 doc.to_s 换成直接访问哈希键的方式就行:
client[:inventory].find({"owner": identity}, projection: {"_id": 0, "group": 1}).each do |doc| # 直接通过键名获取对应的value,比如你的键是"name" puts doc["name"] # 如果你的键是符号类型(比如:name),就用 doc[:name] end
特殊情况处理
如果不确定键名,或者返回的文档只有一个键值对,还可以用 values 方法提取所有值,再取第一个:
puts doc.values.first
为什么不推荐处理字符串?
如果之前你是误把doc转成了字符串(比如doc.to_s得到{"name" => "john"}),虽然可以用eval或者字符串解析来提取,但这样既不安全(eval有注入风险)又麻烦,直接操作原始的Hash对象才是最优雅高效的方式。
内容的提问来源于stack exchange,提问作者Carrein




