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

MongoDB多条件GET查询如何忽略空数组参数?

解决方案

修改后的代码如下:

export const ProductsByFilter = async (req, res) => {
  const { a, b, c } = req.query;
  let query = {};

  if (a) {
    query.a = a;
  }
  // 处理Number类型的b参数:转换类型并校验有效性
  if (b && !isNaN(Number(b))) {
    query.b = Number(b);
  }
  // 处理数组类型的c参数
  if (c) {
    // 统一转为数组,兼容单个值(字符串)或多个值(数组)的传入情况
    const cArray = Array.isArray(c) ? c : [c];
    // 过滤空字符串、null、undefined等无效值
    const validCValues = cArray.filter(val => val != null && val !== '');
    // 仅当有效数组非空时添加查询条件
    if (validCValues.length > 0) {
      query.c = { $in: validCValues };
    }
  }

  const products = await Product.find(query);
  res.status(200).json(products);
};

关键说明

  • b参数修正:req.query中所有参数默认都是字符串类型,需将b转为Number并校验有效性,避免非数字值导致查询异常。
  • c参数处理:
    • 兼容GET请求数组参数的两种传递形式:?c=val1&c=val2(Express自动解析为数组)和?c=val1(解析为字符串),统一转换为数组格式。
    • 过滤数组内的无效值,确保只有有效内容参与查询。
    • 使用MongoDB的$in操作符实现数组匹配,这是数组类型多值查询的标准写法。
  • 原有逻辑保留:维持空/Null参数自动忽略的特性,仅在参数存在且有效时才加入查询条件。

内容的提问来源于stack exchange,提问作者dialac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:12