MongoDB聚合:能否在$cond操作符中使用$regex?
解决MongoDB聚合$cond中使用正则匹配的问题
嘿,你碰到的这个问题很常见——直接在$eq里嵌套$regex确实行不通,因为$eq是用来做严格相等判断的,没法直接处理正则匹配。不过MongoDB专门提供了聚合操作符$regexMatch来解决这种场景,咱们来调整下你的查询:
正确的查询写法
db.captions.aggregate([ { $project: { "videoId": "$videoId", "plainText": "$plainText", "Group1": { $cond: { if: { $regexMatch: { input: "$plainText", regex: /leave\sa\scomment/i } }, then: "Yes", else: "No" } } } } ])
关键说明
$regexMatch是聚合阶段专门用于正则匹配的操作符,它接收三个主要参数:input:指定要进行匹配的字段(这里是$plainText)regex:你的正则表达式(支持字面量或字符串形式,比如"leave\\sa\\scomment")options:可选,比如"i"表示忽略大小写,你也可以把它直接写在正则里(像示例里的/.../i)
- 这个操作符会返回布尔值,刚好能被
$cond用来判断分支逻辑。
额外小提示
如果需要匹配多个正则条件,还可以结合$or/$and来组合多个$regexMatch,比如:
Group1: { $cond: { if: { $or: [ { $regexMatch: { input: "$plainText", regex: /leave\sa\scomment/i } }, { $regexMatch: { input: "$plainText", regex: /subscribe/i } } ] }, then: "Yes", else: "No" } }
这样就能实现你想要的分组逻辑啦~
内容的提问来源于stack exchange,提问作者NIXes
相关产品推荐
相关产品推荐

