복붙노트

[MONGODB] 케이스 몽고에서 검색 문자를 구분

MONGODB

케이스 몽고에서 검색 문자를 구분

나는 몽고에 https://stackoverflow.com/q/5500823/1028488 유사한 검색 문자를 구분 케이스를 사용하고 있습니다.

즉, 난 내가 옵션 정규식을 사용하고 있습니다. 하지만 문제가 더 SQL에서 '와 마찬가지로'처럼, 그냥 단어의 수행을 정규식을 제한하는 데 문제입니다

예를 들면 : 나는 같은 쿼리를 사용하는 경우 { "SearchWord": { '$ 정규식': '승리', $ 옵션 : '-i'}}, 그것은 나를 승리, 창 및 겨울 결과를 보여줍니다. 내가 어떻게 jsut 쇼 승리에 제한합니까?

나는 / ^이 $ 승리를 시도했다 / 그러나 잘못된 JSON이 .... 방법을 제안하십시오 말하는.

미리 감사드립니다

해결법

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

    1.당신은 '$ 정규식'을 사용할 수 있습니다 : '^ $ 승리'또는 / ^ $ 승리 / I (통지 번째에 아무런 인용)

    당신은 '$ 정규식'을 사용할 수 있습니다 : '^ $ 승리'또는 / ^ $ 승리 / I (통지 번째에 아무런 인용)

    여기에 자료 제공 : 정규식을 몽고와 쿼리

  2. ==============================

    2.당신은 $ 옵션을 사용할 수 있습니다 => 내가 대소 문자 구분 검색. 문자열 일치에 필요한 몇 가지 가능한 예를주기.

    당신은 $ 옵션을 사용할 수 있습니다 => 내가 대소 문자 구분 검색. 문자열 일치에 필요한 몇 가지 가능한 예를주기.

    정확한 대소 문자를 구분 문자열

    db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})
    

    문자열을 포함합니다

    db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
    

    문자열로 시작

    db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})
    

    문자열 끝

    db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})
    

    문자열을 포함하지 않습니다

    db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
    

    책갈피, 당신이해야 할 수있는 다른 변경에 대한 참조로이 보관하십시오. http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

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

    3.UPDATE : MongoDB에 2.4 일 현재로는이 작업을 수행하는 "텍스트"인덱스 및 전체 텍스트 검색 쿼리를 사용합니다. 당신은 여기에 대해 읽을 수 있습니다. 최근 MongoDB를를 사용하는 경우 아래의 방법은 어리 석고 불필요한 것입니다.

    UPDATE : MongoDB에 2.4 일 현재로는이 작업을 수행하는 "텍스트"인덱스 및 전체 텍스트 검색 쿼리를 사용합니다. 당신은 여기에 대해 읽을 수 있습니다. 최근 MongoDB를를 사용하는 경우 아래의 방법은 어리 석고 불필요한 것입니다.

    당신이 MongoDB가있는 경우, <2.4.0 당신과 같이 정규 표현식을 사용할 수 있습니다 :

    > db.reg.insert({searchword: "win"})
    > db.reg.insert({searchword: "window"})
    > db.reg.insert({searchword: "Win"})
    
    > db.reg.find()
    { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
    { "_id" : ObjectId("4ecd2e36dd68c9021e453d13"), "searchword" : "window" }
    { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
    
    > db.reg.find({ searchword: /^win$/i })
    { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
    { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
    

    그러나 버전은 당신이 필요로하지 않기 때문에 작동되지 않았다 "/"는 $ 정규식 연산자를 사용하는 경우 S :

    > db.reg.find({ searchword: { $regex: "^win$", $options: '-i' }})
    { "_id" : ObjectId("4ecd2e33dd68c9021e453d12"), "searchword" : "win" }
    { "_id" : ObjectId("4ecd2e39dd68c9021e453d14"), "searchword" : "Win" }
    

    당신이 그 쿼리 속도를 높일 수 있도록 소문자 searchword 필드를 만들기 위해 적합 할 수 있습니다 있도록 구분하지 쿼리가 인덱스를 사용하지 않는 경우가 있습니다.

    RegularExpressions에 대한 추가 정보를 원하시면 여기로 이동

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

    4.$ strcasecmp를 사용합니다. 집계 프레임 워크는 MongoDB를 2.2에서 소개되었습니다. 당신은 문자열 사이의 대소 문자를 구분하지 않고 비교를 만들기 위해 문자열 연산자 "$ strcasecmp"를 사용할 수 있습니다. 그것은 이상 권장 및 정규식을 사용하는 것보다 쉽다.

    $ strcasecmp를 사용합니다. 집계 프레임 워크는 MongoDB를 2.2에서 소개되었습니다. 당신은 문자열 사이의 대소 문자를 구분하지 않고 비교를 만들기 위해 문자열 연산자 "$ strcasecmp"를 사용할 수 있습니다. 그것은 이상 권장 및 정규식을 사용하는 것보다 쉽다.

    https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp 다음은 집계 명령 연산자에 대한 공식 문서입니다.

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

    5.케이스를 구분을 위해 db.users.find ({ "이름": {$ 정규식 : 새로운 정규식 ( "바이올렛", "I")}})

    케이스를 구분을 위해 db.users.find ({ "이름": {$ 정규식 : 새로운 정규식 ( "바이올렛", "I")}})

    대소 문자 구분을 위해 db.users.find ({ "이름": "바이올렛"}) 또는 db.users.find ({ "이메일": "example@mail.com"})

    사용자 테이블에서 검색

    이름이 검색되는 열 이름과 "바이올렛"텍스트입니다

  6. from https://stackoverflow.com/questions/8246019/case-insensitive-search-in-mongo by cc-by-sa and MIT license