티스토리 뷰

728x90
반응형

 

 

 

 

파이썬에서 몽고DB를 사용할 때

문자열안에 특정 문자가 포함된 데이터들만 가져오고 싶을때 '$regex'를 사용하게 되는데요,

data = collection.find({column: {'$regex': text}})

 

반대로, 특정 문자가 포함되지 않은 데이터들만 가져오고 싶을 때는 어떻게 해야할까요?

처음에는 '$ne'를 사용해보려고 했지만 제대로 기능이 작동되지 않는 것 같더군요 (사용하려는 목적과 $ne의 기능이 부합하는지도 의문.. )

$not을 사용할 경우에는 아래와 같은 에러메세지가 출력되구요.

{
	"message" : "$not cannot have a regex",
	"ok" : 0,
	"code" : 2,
	"codeName" : "BadValue",
	"name" : "MongoError"
}

 

찾아보니 '$regex'에는 정규식 사용이 가능하다고 합니다.

정규식을 사용하여 제외하고 싶은 텍스트를 넣어주면 되겠습니다.

 

data = collection.find({column: {'$regex': '^(?!.*('+text+')).*$', '$options': 'i' }})

 

위와 같이 정규식을 사용하면 text가 포함되지 않은 데이터들만 가져오게 됩니다.

('$options': 'i'는 대소문자 상관없이 데이터 필터링,  이 옵션을 사용하지 않으면 대소문자를 구분.)

 

제외하고 싶은 텍스트가 여러개라면 텍스트 사이에 | 를 넣어주면 됩니다.

data = collection.find({column: {'$regex': '^(?!.*(텍스트1|텍스트2|텍스트3)).*$', '$options': 'i' }})
728x90
반응형
댓글