[regex] MongoDB에서 ‘좋지 않음’연산자를 어떻게 사용할 수 있습니까?

나는 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')}


답변

단어를 포함하지 않는 정규식으로 할 수 있습니다. 또한 $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/


답변