如何从MongoDB动态嵌套数组提取字段值并查询匹配文档
MongoDB动态多条件查询实现方案
实现思路
- 遍历动态生成的List2数组,将每组
labelName和values转换为MongoDB原生的$in查询条件 - 多个条件默认是逻辑与关系,平放在查询对象中即可实现「同时满足所有规则」的筛选要求
- 若需要同步筛选name字段属于List1范围,可额外添加对应
$in条件
代码实现
首先动态构造查询参数:
let selectionCritea = { List1: [ 'mk singh', 'saurav kashsyap' ], List2: [ { labelName: 'Location', values: ['India','America','Japan'] }, { labelName: 'gender', values: ['male'] } ] } // 初始化查询对象 const mongoQuery = {}; // 生成List2对应的查询条件 selectionCritea.List2.forEach(rule => { mongoQuery[rule.labelName] = { $in: rule.values } }) // 若需要匹配name在List1范围内,取消注释下一行即可 // mongoQuery.name = { $in: selectionCritea.List1 }
随后执行查询即可,示例为Node.js MongoDB驱动写法:
// yourCollection为你的集合实例 const matchedDocs = await yourCollection.find(mongoQuery).toArray();
注意事项
你示例中第三条测试数据的Location值为小写america,和规则中大写的America不匹配,若业务需要忽略大小写筛选,可以将$in逻辑替换为正则匹配,或者在数据入库时统一字段大小写格式。
内容的提问来源于stack exchange,提问作者Mohit Kumar
相关产品推荐
相关产品推荐

