我的mongo文档都包含一个名为templateName
的字段。有一些文档包含以下值:a_SystemDefaultTemplate
,b_SystemDefaultTemplate
,c_SystemDefaultTemplate
等。
我想find
那些templateName不以(或包含)SystemDefaultTemplate
我知道可以使用$not
运算符完成,如下所示:
db.collection.find({templateName: {$not: /.*SystemDefaultTemplate$/}})
但是如何使用正则表达式进行相同的操作?
我已经尝试过以下但它似乎不起作用。
db.collection.find({templateName: {$regex: "^(.*SystemDefaultTemplate$)"}})
答案 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 +匹配。“