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

如何使用MongoDB的find()查询匹配_id与owner_id两个ObjectId字段

问题根因

你现有查询不返回结果的核心原因是:ObjectId是MongoDB的特殊对象类型,$where里的==运算符对比对象类型时会判断是否为同一个引用实例,而非对比对象存储的实际ID值,因此就算两个ObjectId的内容完全一致,也会返回不相等。

正确查询方案

方案1(推荐,适用于MongoDB 3.6及以上版本)

直接在find查询条件中使用$expr运算符完成同文档多字段值对比,不需要执行JS脚本,性能远高于$where写法,且符合你不使用聚合框架$match阶段的要求:

db.people.find({
  $expr: { $eq: [ "$_id", "$owner_id" ] }
})

方案2(兼容旧版本,沿用$where写法)

如果你的MongoDB版本低于3.6,必须使用$where的话,需要先把两个ObjectId都转为字符串再做值对比:

db.people.find({
  $where: "this._id.toString() === this.owner_id.toString()"
})

注意:$where会触发全表扫描执行JS逻辑,性能极低且存在注入风险,非必要请优先使用$expr方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:03