MongoDB에서 '좋지 않음'연산자를 어떻게 사용할 수 있습니까?


98

나는 SQL 사용할 수있는 Like연산자를 사용 pymongo,

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

하지만 Not Like연산자를 어떻게 사용할 수 있습니까?

나는 시도했다

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

하지만 오류가 있습니다.

OperationFailure : $ not은 정규식을 가질 수 없습니다.


1
나는 이것이 조금 늦었지만 MongoDB 4.2에서는 $notand $regex연산자 조합이 나를 위해 작동하는 것 같습니다.
b00r00x0

답변:


139

로부터 문서 :

$ 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')}

2
명확하게 말하면는 {$regex: 'ttt'}일반적으로 /ttt/mongodb 와 동일 하므로 쿼리는 db.test.find({c: {$not: /ttt/}}.
idbentley 2013

@idbentley 감사합니다. 귀하의 설명으로 답변을 업데이트했습니다.
shx2 2013

1
정말 고맙습니다. 다른 사람들에게는 'c':{'$not':re.compile('ttt')}. 물론 다시 가져 오기가 필요합니다
김경훈 김경훈 2013-11-24

큰. 나는 또한 후손을 위해 답변에 귀하의 의견을 추가했습니다.
shx2 2013

1
이것은 $ ne 및 $ regex와 동일한 경우 인 것 같습니다. 누구든지 이것을 확인하거나 적어도 추가 할 수 있습니까?
DBrown

56

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.