代码之家  ›  专栏  ›  技术社区  ›  blueren

Mongo regex表示“不匹配”或反向[重复]

  •  12
  • blueren  · 技术社区  · 7 年前

    我的mongo文档都包含一个名为 templateName . 有几个文档包含该值: a_SystemDefaultTemplate , b_SystemDefaultTemplate , c_SystemDefaultTemplate

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

    我知道可以使用 $not 像这样的操作员:

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

    但是如何使用regex实现同样的功能呢?

    我试过下面的方法,但似乎不起作用。

    db.collection.find({templateName: {$regex: "^(.*SystemDefaultTemplate$)"}})
    
    1 回复  |  直到 7 年前
        1
  •  9
  •   JBone    7 年前

    尝试消极前瞻(意思是它不应该包含所提到的短语)

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

    ?! 是消极的前瞻。下面是关于它的一些解释 http://rexegg.com/regex-disambiguation.html#lookarounds

    “赛后消极前瞻:\d+(?!\d |美元) 样本匹配:100比索中的100 解释:\d+匹配100,然后负前瞻(?!\d |美元)断言在字符串中的该位置,紧跟其后的既不是数字也不是字符“美元”

    赛前消极预测:(?!\d+美元)\d+ 样本匹配:100比索中的100 说明:负前瞻(?!\d+美元)断言,在字符串的当前位置,后面不是数字,而是字符“美元”。如果断言成功,引擎将数字与\d+匹配。"