You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断BSON对象ID数组是否包含指定字符串格式ID

如何判断BSON::ObjectId数组是否包含指定字符串格式ID

你遇到的问题很常见——直接用字符串去和数组里的BSON::ObjectId对象做include?判断会返回false,核心原因是类型不匹配:数组里存的是BSON::ObjectId实例,而你要检查的是纯字符串,Ruby会认为这是完全不同的东西。

给你两种实用的解决方法:

方法一:将字符串转为BSON::ObjectId后判断(推荐)

这是最直接高效的方式,把字符串格式的ID转换成对应的BSON::ObjectId实例,再用include?检查:

changed = [BSON::ObjectId('5ae9972ea8abbc3c5484cd5e')]
manager_to_remove = "5ae9972ea8abbc3c5484cd5e"

# 转换后判断
changed.include?(BSON::ObjectId(manager_to_remove)) # => true

方法二:遍历数组将ObjectId转为字符串比较

如果你不想做类型转换,也可以遍历数组,把每个BSON::ObjectId实例转成字符串后和目标字符串对比:

changed.any? { |id| id.to_s == manager_to_remove } # => true

为什么你的原代码不生效?

看你在pry里的操作:

changed = [BSON::ObjectId('5ae9972ea8abbc3c5484cd5e')]
manager_to_remove = "5ae9972ea8abbc3c5484cd5e"
changed.include?(manager_to_remove) # => false

这里changed里的元素是BSON::ObjectId对象,而manager_to_remove是字符串,Ruby的include?会严格匹配对象的类型和值,所以返回false。

内容的提问来源于stack exchange,提问作者tomatito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:30:06