복붙노트

[MONGODB] pymongo와 정규식 쿼리 수행

MONGODB

pymongo와 정규식 쿼리 수행

나는 MongoDB를 서버에 대해 pymongo를 사용하여 정규식 쿼리를 수행하려합니다. 다음 문서 구조는

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

나는 패턴 * 파일과 일치하는 모든 파일을 싶어. 나는 같은이 일을 시도

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

그러나 나는, 아무것도 다시 얻을 MongoDB를 워드 프로세서에 따라이 가능해야하기 때문에 내가 뭔가를 놓친 거지. 나는 그것이 벌금을 작동 몽고 콘솔에서 쿼리를 수행하는 경우, 이것은 API를 나던 지원에게 그런 뜻이 아니면 내가 그냥 잘못을 사용하고 있습니다 않습니다

해결법

  1. ==============================

    1.(예 :이 같은 경우를 무시) 정규 표현식 옵션을 포함 할 경우,이 시도 :

    (예 :이 같은 경우를 무시) 정규 표현식 옵션을 포함 할 경우,이 시도 :

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

    2.정규식 검색을 끈다는 pymongo에서 약간 다르게 수행하지만, 그냥 쉽게된다.

    정규식 검색을 끈다는 pymongo에서 약간 다르게 수행하지만, 그냥 쉽게된다.

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

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

    이 파일과 그 시작 내의 항목이있는 파일 속성이있는 모든 문서를 일치합니다

  3. ==============================

    3.이중 컴파일을 방지하기 위해 당신은 PyMongo와 함께 제공되는 bson 정규식 래퍼를 사용할 수 있습니다 :

    이중 컴파일을 방지하기 위해 당신은 PyMongo와 함께 제공되는 bson 정규식 래퍼를 사용할 수 있습니다 :

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

    정규식은 find_one이 후 '정규 표현식'형식으로 인수를 감지하고 적절한 몽고 쿼리를 형성 할 수 있도록, 컴파일을 시도하지 않고 문자열을 저장합니다.

    나는이 방법은 약간 더 예컨대 다른 최고 응답보다 파이썬 느낌 :

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

    당신은 몇 가지주의가 있기 때문에 정규식 쿼리를 사용하려는 경우 bson 정규식 문서에 독서 그것의 가치.

  4. ==============================

    4.다시의 해결책은 전혀 인덱스를 사용하지 않습니다. 당신은 명령을 같이 사용한다 :

    다시의 해결책은 전혀 인덱스를 사용하지 않습니다. 당신은 명령을 같이 사용한다 :

    db.collectionname.find ({ '파일'{ '$ 정규식': '^ 파일'}})

    (내가 여기에 응답 그래서 나는 그들의 답변 아래에 언급 할 수)

  5. ==============================

    5.

    import re
    
    def get_pattern_query(pattern,starting_with=False,ending_with=False,ignore_case=False):
        start = '^' if starting_with else '.*'
        end = '$' if ending_with else '.*'
        pattern = start + re.escape(pattern) + end
        return re.compile(pattern, re.IGNORECASE) if ignore_case else re.compile(pattern)
    

    핸들 모든 문자를 컴파일하기 전에 패턴을 탈출.

  6. from https://stackoverflow.com/questions/3483318/performing-regex-queries-with-pymongo by cc-by-sa and MIT license