使用动态值调用API时Mongoose无法识别wid参数的问题
问题排查与解决方案
核心问题
req.params.wid 本质是字符串类型(HTTP请求的URL参数默认都是字符串),即便你用console.log输出看起来像整数,和数据库中windo_no的整数类型不匹配,导致$match条件无法匹配到数据。
解决步骤
将wid转换为数字类型
把从URL参数获取的字符串转为整数,再传入聚合查询:let wid = parseInt(req.params.wid, 10); // 或者用 Number(req.params.wid),parseInt指定进制更严谨添加参数合法性校验
避免转换失败导致的异常:if (isNaN(wid)) { return res.status(400).json({ error: '无效的wid参数' }); }验证数据库字段类型
确认集合中windo_no字段的类型为数字(Number),而非字符串。可以通过MongoDB命令行或Compass查看:db.yourCollection.findOne({}, { windo_no: 1 })输出中如果
windo_no是不带引号的数字,说明类型正确;如果带引号则是字符串,需要修正数据或调整转换逻辑。
修正后的完整代码示例
let wid = parseInt(req.params.wid, 10); if (isNaN(wid)) { return res.status(400).send('无效的wid参数'); } let result = await model.aggregate([ { $match: { windo_no: wid, } }, { $unwind: '$date' }, { $match: { 'date.date': "2022-09-09" } } ]);
内容的提问来源于stack exchange,提问作者Hitarthi patel
相关产品推荐
相关产品推荐

