나는 SQL 사용할 수있는 Like
연산자를 사용 pymongo
,
db.test.find({'c':{'$regex':'ttt'}})
하지만 Not Like
연산자를 어떻게 사용할 수 있습니까?
나는 시도했다
db.test.find({'c':{'$not':{'$regex':'ttt'}})
하지만 오류가 있습니다.
OperationFailure : $ not은 정규식을 가질 수 없습니다.
답변:
로부터 문서 :
$ not 연산자는 $ regex 연산자를 사용한 작업을 지원하지 않습니다. 대신 //를 사용하거나 드라이버 인터페이스에서 언어의 정규식 기능을 사용하여 정규식 객체를 만듭니다. // 패턴 일치 표현식을 사용하는 다음 예제를 고려하십시오.
db.inventory.find( { item: { $not: /^p.*/ } } )
수정 (@idbentley) :
{$regex: 'ttt'}
일반적으로 /ttt/
mongodb 와 동일 하므로 쿼리는 다음과 같습니다.
db.test.find({c: {$not: /ttt/}}
EDIT2 (@KyungHoon Kim) :
에서 파이썬 , 하나 개의 작품 아래 :
'c':{'$not':re.compile('ttt')}
{$regex: 'ttt'}
일반적으로 /ttt/
mongodb 와 동일 하므로 쿼리는 db.test.find({c: {$not: /ttt/}}
.
'c':{'$not':re.compile('ttt')}
. 물론 다시 가져 오기가 필요합니다
단어를 포함하지 않는 정규식으로 할 수 있습니다. 또한 $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/
$not
and$regex
연산자 조합이 나를 위해 작동하는 것 같습니다.