[MONGODB] 케이스 몽고에서 검색 문자를 구분
MONGODB케이스 몽고에서 검색 문자를 구분
나는 몽고에 https://stackoverflow.com/q/5500823/1028488 유사한 검색 문자를 구분 케이스를 사용하고 있습니다.
즉, 난 내가 옵션 정규식을 사용하고 있습니다. 하지만 문제가 더 SQL에서 '와 마찬가지로'처럼, 그냥 단어의 수행을 정규식을 제한하는 데 문제입니다
예를 들면 : 나는 같은 쿼리를 사용하는 경우 { "SearchWord": { '$ 정규식': '승리', $ 옵션 : '-i'}}, 그것은 나를 승리, 창 및 겨울 결과를 보여줍니다. 내가 어떻게 jsut 쇼 승리에 제한합니까?
나는 / ^이 $ 승리를 시도했다 / 그러나 잘못된 JSON이 .... 방법을 제안하십시오 말하는.
미리 감사드립니다
해결법
-
==============================
1.당신은 '$ 정규식'을 사용할 수 있습니다 : '^ $ 승리'또는 / ^ $ 승리 / I (통지 번째에 아무런 인용)
당신은 '$ 정규식'을 사용할 수 있습니다 : '^ $ 승리'또는 / ^ $ 승리 / I (통지 번째에 아무런 인용)
여기에 자료 제공 : 정규식을 몽고와 쿼리
-
==============================
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.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.$ strcasecmp를 사용합니다. 집계 프레임 워크는 MongoDB를 2.2에서 소개되었습니다. 당신은 문자열 사이의 대소 문자를 구분하지 않고 비교를 만들기 위해 문자열 연산자 "$ strcasecmp"를 사용할 수 있습니다. 그것은 이상 권장 및 정규식을 사용하는 것보다 쉽다.
$ strcasecmp를 사용합니다. 집계 프레임 워크는 MongoDB를 2.2에서 소개되었습니다. 당신은 문자열 사이의 대소 문자를 구분하지 않고 비교를 만들기 위해 문자열 연산자 "$ strcasecmp"를 사용할 수 있습니다. 그것은 이상 권장 및 정규식을 사용하는 것보다 쉽다.
https://docs.mongodb.com/manual/reference/operator/aggregation/strcasecmp/#exp._S_strcasecmp 다음은 집계 명령 연산자에 대한 공식 문서입니다.
-
==============================
5.케이스를 구분을 위해 db.users.find ({ "이름": {$ 정규식 : 새로운 정규식 ( "바이올렛", "I")}})
케이스를 구분을 위해 db.users.find ({ "이름": {$ 정규식 : 새로운 정규식 ( "바이올렛", "I")}})
대소 문자 구분을 위해 db.users.find ({ "이름": "바이올렛"}) 또는 db.users.find ({ "이메일": "example@mail.com"})
사용자 테이블에서 검색
이름이 검색되는 열 이름과 "바이올렛"텍스트입니다
from https://stackoverflow.com/questions/8246019/case-insensitive-search-in-mongo by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 중첩 된 필드에서 MongoDB를 업데이트 데이터 (0) | 2019.12.22 |
---|---|
[MONGODB] 자바 스크립트의 ISO 날짜 객체를 생성 (0) | 2019.12.22 |
[MONGODB] 날짜를 오늘에 의해 생성 된 결과를 찾을 수 MongoDB를 (0) | 2019.12.22 |
[MONGODB] MongoDB를은 다음 몽고 쉘에서 ObjectId가에서 날짜 범위 쿼리를 수행 (0) | 2019.12.22 |
[MONGODB] MongoDB의의 열 가장 높은 값을 얻기 (0) | 2019.12.22 |