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

MongoDB find查询返回空数组,按Code查询商品无结果如何解决

问题原因
  • 请求URL参数格式错误:当前请求http://localhost:5000/products/search?3036未指定参数名,Express 会将req.query解析为{ "3036": "" },无法获取到正确的查询值。
  • 控制器参数取值错误:代码中直接将整个query对象赋值给searchPLU,没有提取对应参数字段的值,查询条件匹配的是整个对象,必然无法匹配到数据。
  • 数据类型不匹配:数据库中Code字段为数字类型,URL参数解析后默认是字符串类型,使用全等$eq查询时,类型不一致会导致匹配失败。
  • 额外问题:原代码catch块返回404状态码不符合规范,404代表资源不存在,服务端运行异常应返回500状态码
解决步骤
  1. 修正请求URL格式,补充参数名,示例如下:
http://localhost:5000/products/search?code=3036
  1. 修正控制器逻辑,提取对应参数并做类型转换,同时补充参数合法性校验:
export const getProductByPLU = async (req, res) => {
  // 提取code参数并转为数字类型,和数据库字段类型对齐
  const searchPLU = Number(req.query.code);
  // 校验参数合法性
  if (isNaN(searchPLU)) {
    return res.status(400).json({ message: "无效的Code参数" });
  }
  try {
    // 若只需返回单个商品,可将find替换为findOne,直接返回商品对象而非数组
    const product = await Product.find({ Code: searchPLU });
    res.json({ data: product });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
};
  1. 可选调试步骤:在查询前打印searchPLU的取值和类型,确认和数据库中Code字段的类型、值一致:
console.log('查询值:', searchPLU, '类型:', typeof searchPLU);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:15:07