我使用pymongo的SQL'Like'运算符,
db.test.find({'c':{'$regex':'ttt'}})
但我如何使用'不喜欢'运营商?
我试过
db.test.find({'c':{'$not':{'$regex':'ttt'}})
答案 0 :(得分:114)
来自docs:
$ not运算符不支持使用$ regex进行操作 运营商。而是使用//或在您的驱动程序界面中使用您的 language的正则表达式功能,用于创建正则表达式 对象。请考虑以下使用模式匹配的示例 表达//:
db.inventory.find( { item: { $not: /^p.*/ } } )
{$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/