【问题标题】:mongodb exculde matched to the data?mongodb排除匹配的数据?
【发布时间】:2015-09-23 02:14:19
【问题描述】:

mongodb中有一些数据:

{'name': 'bob', age: 12}
{'name': 'sam': age: 34}
{'name': 'byaelle': age: 22}

如果我想获取名字的数据包括am
我可以使用

{'name': {'$regex': 'am'}}

但是,我怎样才能得到名字排除am的数据呢?

【问题讨论】:

    标签: regex mongodb mongodb-query pymongo nosql


    【解决方案1】:

    您需要将$not 运算符与正则表达式对象一起使用,因为$not 不能有$regex

    db.collection.find( { "name": { "$not" : /am/ }})
    

    您还可以使用以下正则表达式^((?!am).)*$ 来匹配不包含单词的文本。

    collection.find({ 'name': { '$regex': '^((?!am).)*$' }})
    

    【讨论】:

      【解决方案2】:

      当然你也可以用$not反转:

      db.collection.find({ "name": { "$not": /am/  } })
      

      但既然是$regex,你可以这样做:

      db.collection.find({ "name": /^((?!am).)*$/ })
      

      或者

      db.collection.find({ "name": { "$regex": "^((?!am).)*$", "$options": "gm" } })
      

      如果您的字符串以这种方式形成,请确保内容匹配多行。


      对于要排除的多个片段,您可以在表达式中使用| 将它们分开。例如排除包含“bo”或“am”的词:

      db.collection.find({ "name": { "$regex": "^((?!bo|am).)*$", "$options": "gm" } })
      

      或使用接受正则表达式的$nin 运算符(“not”$in):

      db.collection.find({ "name": { "$nin": [/bo/,/am/] } })
      

      【讨论】:

      • 如果我想得到名字排除ambo等等?
      • @nataila ^((?!bo|am).)*$ 所以使用|。哪种意思是“或”。明白了吗?
      • 如果我想使用$not?
      • @nataila 上面已经解释过了。以后,您在此处提交的每个问题只能问 一个 问题。如果您有更多问题,您应该发布其他问题。
      猜你喜欢
      • 2014-02-15
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      相关资源
      最近更新 更多