MongoDB聚合中如何返回集合字段值包含的指定集合内字符串
MongoDB聚合子串匹配关键词列表实现方案
可以实现该需求,核心逻辑是通过数组遍历+大小写不敏感的正则匹配,提取文档字段中包含的目标关键词。
你之前使用的$setDifference是集合差集运算算子,仅能判断值的完全相等,不支持子串包含判断;单独使用$regexMatch未结合数组遍历逻辑时,无法逐个匹配关键词列表中的每一项。
具体聚合实现代码
db.your_collection.aggregate([ { $addFields: { matched_keywords: { $filter: { input: ["TOM", "Herb"], // 替换为你的待匹配字符串集合 cond: { $regexMatch: { input: { $toUpper: "$name" }, regex: { $toUpper: "$$this" } } } } } } }, // 过滤无匹配结果的文档 { $match: { matched_keywords: { $ne: [] } } }, // 拆分多匹配结果,一个关键词对应一条输出记录 { $unwind: "$matched_keywords" }, // 格式化输出字段 { $project: { _id: 0, name_abbr: { $toUpper: "$matched_keywords" } } } ])
执行效果
针对你给出的测试集合数据,执行上述聚合后返回结果完全符合预期:
[ { "name_abbr": "TOM" }, { "name_abbr": "HERB" } ]
注意事项
- 上述代码通过统一转大写实现了大小写不敏感匹配,如果需要严格区分大小写,删除两处
$toUpper转换逻辑即可 $in算子仅支持判断字段值是否完全等于数组中某一项,不支持子串包含判断,请勿用其替代$filter+$regexMatch的组合逻辑- 若单个文档的
name字段同时匹配多个关键词,$unwind阶段会自动拆分生成多条对应记录
内容的提问来源于stack exchange,提问作者DefiBax
相关产品推荐
相关产品推荐

