该$regexFind操作的语法如下:
| 领域 | 描述 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 输入 | |||||||||||
| 正则表达式 | 要应用的正则表达式模式。可以是任何可解析为字符串或正则表达式模式的有效表达式
另外,您也可以在options字段中指定正则表达式选项
。要指定 您不能在 |
||||||||||
| 选项 | 可选的。以下内容 注意 您不能在
|
$regexFind和排序规则¶$regexFind忽略为collection指定的归类db.collection.aggregate()和索引(如果使用)。
例如,创建一个具有整理强度的样本集合
1(即仅比较基本字符而忽略其他区别,例如大小写和变音符号):
插入以下文件:
使用集合的排序规则,以下操作将执行不区分大小写和不区分音素的匹配:
该操作返回以下3个文档:
但是,聚合表达式会$regexFind忽略排序规则;也就是说,以下正则表达式模式匹配示例区分大小写和变音符号:
这两个操作都返回以下内容:
captures输出行为¶如果您的正则表达式模式包含捕获组,并且该模式在input中找到匹配项captures,则结果中的
数组将与匹配字符串捕获的组相对应。捕获组()在正则表达式模式中用不转义的括号指定。captures阵列的长度等于模式中捕获组的数量,并且阵列的顺序与捕获组出现的顺序匹配。
创建一个contacts使用以下文档命名的样本集合:
以下管道将正则表达式
模式/(C(ar)*)ol/应用于fname字段:
该正则表达式模式找到具有匹配fname
值Carol和Colleen:
模式包含捕获组(C(ar)*),捕获组包含嵌套组(ar)。captures数组中的元素对应于两个捕获组。如果某个组(例如Colleen和组(ar))
没有捕获到匹配的文档,则$regexFind用空的占位符替换该组。
如上例所示,该captures数组包含每个捕获组的元素(null用于非捕获)。考虑以下示例,该示例通过将or捕获组逻辑应用于phone字段来搜索带有纽约市区号的电话号码。每个组代表一个纽约市区号:
对于正则表达式
模式匹配的文档,captures数组包括匹配的捕获组,并用替换所有非捕获组null:
$regexFind及其选项¶为了说明$regexFind此示例中讨论的操作员的行为,请products使用以下文档创建样本集合:
默认情况下,$regexFind执行区分大小写的匹配。例如,以下聚合在字段上区分大小写
。正则表达式模式不指定任何分组:$regexFinddescription/line/
该操作返回以下内容:
以下正则表达式模式在模式中/lin(e|k)/指定了一个分组
(e|k):
该操作返回以下内容:
在return选项中,该idx字段是代码点索引,而不是字节索引。为了说明,请考虑以下使用regex模式的示例/tier/:
该操作返回以下内容,其中只有最后一条记录与模式匹配,并且返回的idx是2(如果使用字节索引,则返回3)
i选项¶注意
您不能在regex和
options字段中同时指定选项。
要执行不区分大小写的模式匹配,请在正则表达式字段或选项字段中包括i选项:
例如,以下聚合对字段执行不区分大小写
$regexFind的操作description。正则表达式模式/line/不指定任何分组:
该操作返回以下文档: