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

使用cursor.limit(req.query.limit)返回空数组的技术求助

问题原因及解决办法

核心问题

req.query.limit 是从URL获取的字符串类型,而MongoDB的limit()方法要求传入数值类型参数。直接传递字符串会导致MongoDB无法正确解析,最终返回空数组。

修复代码

将req.query.limit转换为数值类型后再传入limit(),同时处理参数未提供或无效的情况:

export const getHotels = async (req, res, next) => {
  const { min, max, limit, ...others } = req.query;
  try {
    // 将limit转换为数值,无效时设为undefined(不限制数量)
    const numericLimit = limit ? parseInt(limit, 10) : undefined;
    // 将min和max也转换为数值,避免位运算潜在问题
    const numericMin = min ? parseInt(min, 10) : 1;
    const numericMax = max ? parseInt(max, 10) : 999;

    const hotels = await Hotel.find({
      ...others,
      cheapestPrice: { $gt: numericMin, $lt: numericMax },
    }).limit(numericLimit);

    res.status(200).json(hotels);
  } catch (err) {
    next(err);
  }
};

额外说明

  • 原代码中min | 1使用了位运算,虽然能将字符串转为数字,但对于非整数或无效值的处理不够直观,改用parseInt()更清晰可靠。
  • 转换时指定基数10(即parseInt(limit,10)),避免出现八进制解析等意外情况。

内容的提问来源于stack exchange,提问作者أحمد السديري

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:25:02