복붙노트

[MONGODB] 정수 값에 MongoDB를 정규식 검색

MONGODB

정수 값에 MongoDB를 정규식 검색

나는 MongoDB의 정수 값을 검색 정규식 싶습니다. 이것이 가능한가?

나는 다양한 분야에 와일드 카드 *를 할 수있는 CRUD 유형 인터페이스를 짓고 있어요. 나는 정수 몇 가지 필드에 대한 일관된 UI를 유지하기 위해 노력하고있어.

치다:

> db.seDemo.insert({ "example" : 1234 });
> db.seDemo.find({ "example" : 1234 });
{ "_id" : ObjectId("4bfc2bfea2004adae015220a"), "example" : 1234 }
> db.seDemo.find({ "example" : /^123.*/ });
> 

당신이 볼 수 있듯이, 나는 개체를 삽입하고 난 값을 찾을 수 있어요. 나는 간단한 정규식을하려고하면, 나는 실제로 개체를 찾을 수 없습니다.

감사!

해결법

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

    1.당신은 숫자에 패턴 일치를 수행하고자하는 경우, 몽고에서 그것을 할 수있는 방법은 $ 표현을 사용하고 패턴 일치를 전달합니다.

    당신은 숫자에 패턴 일치를 수행하고자하는 경우, 몽고에서 그것을 할 수있는 방법은 $ 표현을 사용하고 패턴 일치를 전달합니다.

    > db.test.find({ $where: "/^123.*/.test(this.example)" })
    { "_id" : ObjectId("4bfc3187fec861325f34b132"), "example" : 1234 }
    
  2. ==============================

    2.나는 그것이 인덱스를 사용하지 않는 방식으로 인해 쿼리 연산자는 쿼리 식을 평가합니다 $를 사용의 큰 팬 쿼리가 사용하는 사용자 입력 데이터의 경우 보안 위험하지 않다.

    나는 그것이 인덱스를 사용하지 않는 방식으로 인해 쿼리 연산자는 쿼리 식을 평가합니다 $를 사용의 큰 팬 쿼리가 사용하는 사용자 입력 데이터의 경우 보안 위험하지 않다.

    이 작업을 수행하여 MongoDB에서 사용할 수있는 $ regexFindAll 4.1.9+하고 $ EXPR | $ regexFind | MongoDB를 4.2에서 시작 당신은 $ REGEXMATCH를 사용할 수 있습니다.

    let regex = /123/;
    

    MongoDB를 4.0에서 당신은 캐릭터 라인 화 정수에 $ 변환 연산자의 래퍼 인 $의를 toString 연산자를 사용할 수 있습니다.

    db.seDemo.aggregate([ 
        { "$redact": { 
            "$cond": [ 
                { "$gt": [ 
                    { "$indexOfCP": [ 
                        { "$toString": "$example" }, 
                        "123" 
                    ] }, 
                    -1 
                ] }, 
                "$$KEEP", 
                "$$PRUNE" 
            ] 
        }}
    ])
    

    당신이 원하는 것은 릴리스 3.4에서 시작하여 특정 문자열을 포함하는 모든 문서를 검색 할 경우, 당신은 $ 조건부 논리 처리를 허용하는 $의 편집하다 연산자를 사용할 수 있습니다. $ indexOfCP을.

    db.seDemo.aggregate([ 
        { "$redact": { 
            "$cond": [ 
                { "$gt": [ 
                    { "$indexOfCP": [ 
                        { "$toLower": "$example" }, 
                        "123" 
                    ] }, 
                    -1 
                ] }, 
                "$$KEEP", 
                "$$PRUNE" 
            ] 
        }}
    ])
    

    이는 생산 :

    { 
        "_id" : ObjectId("579c668c1c52188b56a235b7"), 
        "example" : 1234 
    }
    
    { 
        "_id" : ObjectId("579c66971c52188b56a235b9"), 
        "example" : 12334 
    }
    

    MongoDB를 3.4 이전에, 당신은 당신의 문서를 프로젝트와 숫자의 문자열 값 또 다른 계산 필드를 추가 $해야합니다.

    $ tolower를 그의 형제 $의 TOUPPER 사업자는 각각 문자열을 소문자로 변환하고 대문자하지만 그들은 문자열로 정수를 변환하는 데 사용할 수 있다는 것입니다 조금 알 수없는 기능이 있습니다.

    모든 $ 일치 연산자가 반환 $ 정규식 연산자를 사용하여 패턴과 일치하는 문서.

    db.seDemo.aggregate(
        [ 
            { "$project": { 
                "stringifyExample": { "$toLower": "$example" }, 
                "example": 1 
            }}, 
            { "$match": { "stringifyExample": /^123.*/ } }
        ]
    )
    

    이는 수율 :

    { 
        "_id" : ObjectId("579c668c1c52188b56a235b7"), 
        "example" : 1234,
        "stringifyExample" : "1234"
    }
    
    { 
        "_id" : ObjectId("579c66971c52188b56a235b9"), 
        "example" : 12334,
        "stringifyExample" : "12334"
    }
    

    이제, 당신이 원하는 경우 특정 문자열 달러 (A $) 조건부 논리 처리를 허용하는 $의 편집하다 연산자를 사용하여이 (이 글을 쓰는 현재) MongoDB의의 곧 출시에를 할 수있는 쉽고 더 좋은 방법을 포함하는 모든 문서를 검색하다 . $ indexOfCP.

    db.seDemo.aggregate([ 
        { "$redact": { 
            "$cond": [ 
                { "$gt": [ 
                    { "$indexOfCP": [ 
                        { "$toLower": "$example" }, 
                        "123" 
                    ] }, 
                    -1 
                ] }, 
                "$$KEEP", 
                "$$PRUNE" 
            ] 
        }}
    ])
    
  3. from https://stackoverflow.com/questions/2908100/mongodb-regex-search-on-integer-value by cc-by-sa and MIT license