Mongoose中find方法过滤条件失效问题排查
问题原因分析
1. Mongoose严格查询机制过滤了未定义字段
你创建Schema时传入的是空对象{},没有声明age字段的结构。Mongoose 6+版本默认开启strictQuery选项,该规则会直接忽略所有Schema中未定义的查询条件字段,导致你设置的{age:'28'}被丢弃,等同于执行无过滤的find()操作,因此返回了全部数据。
2. 查询条件类型与数据库存储类型不匹配
从返回结果可以看出,数据库中age字段存储的是数字类型(如27、40),但你的查询条件里写的是字符串'28'。MongoDB是强类型数据库,字符串和数字属于不同类型,不会被判定为相等,即使解决了Schema的问题,这个条件也无法匹配到目标数据。
修复方案
- 完善Schema定义,明确字段类型:
const dbSchema = mongoose.Schema({ age: Number // 声明age为数字类型 }, { collection: 'users' })
- 修正查询条件的类型,使用数字匹配:
dbModel.find({ age: 28 }, { age: 1 }, (err, res) => { console.log(res) })
内容的提问来源于stack exchange,提问作者Cihan Sulu
相关产品推荐
相关产品推荐

