source

PyMongo를 사용하여 regex 쿼리 수행

nicesource 2023. 3. 15. 19:44
반응형

PyMongo를 사용하여 regex 쿼리 수행

PyMongo를 사용하여 MongoDB 서버에 regex 쿼리를 실행하려고 합니다.문서 구조는 다음과 같습니다.

{
  "files": [
    "File 1",
    "File 2",
    "File 3",
    "File 4"
  ],
  "rootFolder": "/Location/Of/Files"
}

*파일 패턴에 맞는 파일을 모두 입수하고 싶습니다.이렇게 하려고 했는데

db.collectionName.find({'files':'/^File/'})

하지만 난 아무것도 돌려받지 못했어MongoDB 문서에 따르면 이것이 가능하기 때문에 제가 놓친 것이 있습니까?Mongo 콘솔에서 쿼리를 실행하면 정상적으로 동작합니다.API가 지원되지 않는 건가요?아니면 제가 잘못 사용하고 있는 건가요?

정규 표현 옵션(대소문자 무시 등)을 포함할 경우 다음을 수행합니다.

import re
regx = re.compile("^foo", re.IGNORECASE)
db.users.find_one({"files": regx})

regex 검색은 pymongo에서 조금 다르게 수행되지만 마찬가지로 쉽습니다.

정규식은 다음과 같이 수행됩니다.

db.collectionname.find({'files':{'$regex':'^File'}})

파일 속성이 있는 모든 문서와 일치하며 파일 안에 파일로 시작하는 항목이 있습니다.

이중 컴파일을 피하기 위해 PyMongo와 함께 제공되는 bson regex 래퍼를 사용할 수 있습니다.

>>> regx = bson.regex.Regex('^foo')
>>> db.users.find_one({"files": regx})

Regex는 컴파일을 시도하지 않고 문자열을 저장하기 때문에 find_one은 인수를 'Regex' 유형으로 검출하여 적절한 Mongo 쿼리를 형성할 수 있습니다.

이 방법은 다른 상위 답변보다 약간 더 피토닉하다고 생각합니다. 예를 들어 다음과 같습니다.

>>> db.collectionname.find({'files':{'$regex':'^File'}})

몇 가지 경고가 있으므로 regex 쿼리를 사용할 계획이라면 bson Regex 문서를 읽어보는 것이 좋습니다.

해결 방법re인덱스를 전혀 사용하지 않습니다.다음과 같은 명령을 사용해야 합니다.

db.collectionname.find({'files':{'$regex':'^File'}})

(아래에 코멘트를 드릴 수 없기 때문에, 이쪽에서 회신합니다.)

언급URL : https://stackoverflow.com/questions/3483318/performing-regex-queries-with-pymongo

반응형