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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:34:54