Mongoose findOne方法报错:Callback must be a function, got [object Object] 解决方法咨询
修复Mongoose findOne的回调错误问题
问题根源
你遇到的MongooseError: Callback must be a function, got [object Object]错误,本质是参数传递格式完全不符合Mongoose的findOne方法要求。
findOne的参数逻辑是:Model.findOne(查询条件对象, [返回字段投影], [配置选项], [回调函数])
用async/await语法时,不需要传回调函数,只需要前面三个可选参数。
你现在把多个查询条件拆成了多个独立对象挨个传递,比如第二个参数{Size: {$gte: ...}}被Mongoose误判成了回调函数(因为它是查询对象之后的第一个参数),自然就触发了这个类型错误。
修复方案
你需要把所有的查询规则合并到同一个对象里——Mongoose的查询条件本身就是一个单一对象,多个字段的匹配规则默认是逻辑与($and)的关系,直接把所有键值对放在一个对象内部即可。
修正后的代码如下:
const monitorfind = await monitorschema.findOne({ Price: { $lte: Number(reqbody.price) }, Size: { $gte: Number(reqbody.size - 8) }, hz: { $gte: Number(reqbody.hz - 25) }, Resolution: { $gte: Number(reqbody.res) }, ResponseTime: { $lte: Number(reqbody.ms + 4) } });
额外小提示
- 要确保
reqbody里的price、size等字段能被正常转成数值,避免出现NaN导致查询失效; - 如果需要指定只返回某些字段,可以在查询对象后加第二个投影参数,比如只返回尺寸和价格:
const monitorfind = await monitorschema.findOne( // 上面的查询条件对象 { Size: 1, Price: 1, _id: 0 } // _id默认返回,不想返回就设为0 );
内容的提问来源于stack exchange,提问作者Bob joe12
相关产品推荐
相关产品推荐

