You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动