Node+MongoDB项目中limit参数导致查询返回空数组问题
问题原因
你遇到的问题核心是req.query中的参数都是字符串类型,而MongoDB的limit()方法需要传入数字类型的值。当你直接传req.query.limit(也就是字符串"3")时,MongoDB会将其解析为无效的限制值(比如0),导致返回空数组。
解决方法
把req.query.limit转换为数字类型,同时剥离掉查询条件里的limit参数(避免干扰find的查询逻辑),还可以添加默认值处理(没有传limit时返回全部结果)。修改后的代码如下:
export const getHotels = async (req, res, next) => { const { min, max, limit, ...others } = req.query; // 将limit转为数字,未传则设为undefined(不限制返回数量) const limitNum = limit ? parseInt(limit, 10) : undefined; try { const hotels = await Hotel.find(others).limit(limitNum); res.status(200).json(hotels); } catch (err) { next(err); } };
额外说明
你原代码里还有个隐藏问题:直接用Hotel.find(req.query)时,req.query包含了limit参数,而MongoDB的查询条件里并不需要这个参数,会导致查询逻辑冗余。用解构后的others作为find的参数,才能保证过滤条件只包含featured这类业务相关的字段。
内容的提问来源于stack exchange,提问作者taribi isaac
相关产品推荐
相关产品推荐

