为何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
相关产品推荐
相关产品推荐

