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

问题描述 投票:4回答:1

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

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

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

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

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

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

db.collection.find({templateName: {$regex: "^(.*SystemDefaultTemplate$)"}})
regex mongodb mongodb-query regex-negation
1个回答
3
投票

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

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 +匹配。“

© www.soinside.com 2019 - 2024. All rights reserved.