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

为何MongoDB中db.find({"N":{$eq:1}})返回空数组?

问题原因分析

两段代码看似功能一致,但核心差异在于匹配时的类型处理规则:

  • db.find({"N": {$eq:1} })使用MongoDB原生查询操作符,$eq会严格匹配值和数据类型。如果你的集合里字段N存储的是字符串类型的"1"(而非数字类型的1),数字1和字符串"1"类型不匹配,自然返回空数组。
  • db.find({$where : function(){return(this.N==1)}})通过JavaScript执行查询,其中的==是JS宽松相等运算符,会自动做类型转换——字符串"1"和数字1会被判定为相等,所以能返回预期结果。

验证与解决方法

  • 确认字段N的实际类型:执行db.collection.find({}, {N:1, _id:0}).limit(1)查看文档中N的格式,或用db.collection.find({"N": {$type: "string"}})筛选字符串类型记录,{$type: "int"}筛选数字类型记录。
  • 修正查询语句:如果字段是字符串类型,改用db.find({"N": "1"});如果是数字类型,检查集合中是否确实存在值为1的记录。
  • 避免使用$where:该方式性能远低于原生查询(需逐文档执行JS代码),还存在注入风险,优先使用原生操作符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:24:22