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

时间:2017-12-22 10:58:07

标签: regex mongodb mongodb-query regex-negation

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

我想find那些templateName不以(或包含)SystemDefaultTemplate

结尾的文档

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

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

但是如何使用正则表达式进行相同的操作?

我已经尝试过以下但它似乎不起作用。

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

1 个答案:

答案 0 :(得分:3)

尝试使用否定前瞻(意味着它不应包含上述短语)

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

?!是负面展望。以下是http://rexegg.com/regex-disambiguation.html#lookarounds

对此的一些解释

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

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