如何在MongoDB中使用'Not Like'运算符

时间:2013-11-24 13:37:10

标签: regex mongodb mongodb-query pymongo sql-like

我使用pymongo的SQL'Like'运算符,

db.test.find({'c':{'$regex':'ttt'}})

但我如何使用'不喜欢'运营商?

我试过

db.test.find({'c':{'$not':{'$regex':'ttt'}})

2 个答案:

答案 0 :(得分:114)

来自docs

  

$ not运算符不支持使用$ regex进行操作   运营商。而是使用//或在您的驱动程序界面中使用您的   language的正则表达式功能,用于创建正则表达式   对象。请考虑以下使用模式匹配的示例   表达//:

db.inventory.find( { item: { $not: /^p.*/ } } )

编辑(@idbentley):

{$regex: 'ttt'}通常相当于mongodb中的/ttt/,因此您的查询将变为db.test.find({c: {$not: /ttt/}}

EDIT2(@KyungHoon Kim):

在python中,这有效:'c':{'$not':re.compile('ttt')}

答案 1 :(得分:44)

您可以使用不包含单词的正则表达式。此外,您可以使用$options => i进行不敏感搜索。

不包含string

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

确切的不区分大小写string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

string

开头
db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

string

结束
db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

包含string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

将此保留为书签,以及您可能需要的任何其他更改的参考。 http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/