MongoDB find查询返回空数组,按Code查询商品无结果如何解决
问题原因
- 请求URL参数格式错误:当前请求
http://localhost:5000/products/search?3036未指定参数名,Express 会将req.query解析为{ "3036": "" },无法获取到正确的查询值。 - 控制器参数取值错误:代码中直接将整个query对象赋值给
searchPLU,没有提取对应参数字段的值,查询条件匹配的是整个对象,必然无法匹配到数据。 - 数据类型不匹配:数据库中
Code字段为数字类型,URL参数解析后默认是字符串类型,使用全等$eq查询时,类型不一致会导致匹配失败。 - 额外问题:原代码catch块返回404状态码不符合规范,404代表资源不存在,服务端运行异常应返回500状态码
解决步骤
- 修正请求URL格式,补充参数名,示例如下:
http://localhost:5000/products/search?code=3036
- 修正控制器逻辑,提取对应参数并做类型转换,同时补充参数合法性校验:
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 }); } };
- 可选调试步骤:在查询前打印
searchPLU的取值和类型,确认和数据库中Code字段的类型、值一致:
console.log('查询值:', searchPLU, '类型:', typeof searchPLU);
内容的提问来源于stack exchange,提问作者Nedzny
相关产品推荐
相关产品推荐

