Mongo正则表达式为“不匹配”或反向

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongo正则表达式为“不匹配”或反向相关的知识,希望对你有一定的参考价值。

我的mongo文件都包含一个名为templateName的字段。有一些文件包含值:a_SystemDefaultTemplateb_SystemDefaultTemplatec_SystemDefaultTemplate等。

我想find那些templateName不以(或包含)SystemDefaultTemplate结尾的文件

我知道可以使用$not运算符完成,如下所示:

db.collection.find({templateName: {$not: /.*SystemDefaultTemplate$/}})

但是我如何使用正则表达式做同样的事情呢?

我尝试了以下但它似乎没有工作。

db.collection.find({templateName: {$regex: "^(.*SystemDefaultTemplate$)"}})
答案

尝试用负面向前看(意思是它不应该包含所提到的短语)

db.collection.find({templateName: {$regex: "^(?!SystemDefaultTemplate$)"}})

?!是负面展望未来。以下是来自http://rexegg.com/regex-disambiguation.html#lookarounds的一些解释

“比赛后的负面前瞻: d +(?! d | dollar)样本匹配:100比100中的100说明: d +匹配100,然后负前瞻(?! d | dollar)断言在该位置字符串,紧接着的是既不是数字也不是字符“美元”

匹配前的否定前瞻:(?! d + dollar) d +样本匹配:100比100中的100说明:负前瞻(?! d + dollar)断言在字符串中的当前位置,后面的内容不是数字然后人物“美元”。如果断言成功,则引擎将数字与 d +匹配。“

以上是关于Mongo正则表达式为“不匹配”或反向的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:正向反向预查

正则表达式之正向预查和反向预查

Linux基础6-1 grep和正则表达式

Linux基础6-1 grep和正则表达式

第61篇 Django 路由系统 正则表达式和二级路由 路由的命名和反向解析

Java:正则表达式不匹配