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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:51:45