티스토리 뷰
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
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] requests 모듈에서 프록시 설정하는 방법 (0) | 2023.02.24 |
---|---|
[django] 장고에서 사용자 비밀번호 변경하기 (0) | 2023.02.09 |
[오류해결] pip install pycrypto : legacy-install-failure (0) | 2023.01.13 |
[오류해결] ValueError: Unable to find resource t64.exe in package pip._vendor.distlib (0) | 2023.01.12 |
[오류해결] django debug=false static files not found (0) | 2023.01.04 |
댓글