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操作符实现数组匹配,这是数组类型多值查询的标准写法。
- 兼容GET请求数组参数的两种传递形式:
- 原有逻辑保留:维持空/Null参数自动忽略的特性,仅在参数存在且有效时才加入查询条件。
内容的提问来源于stack exchange,提问作者dialac
相关产品推荐
相关产品推荐

