728x90
반응형
정규 표현식
MongoDB에서 정규 표현식을 사용하여 원하는 도큐먼트를 선택할 수 있다.
// db.컬렉션.find({필드:/정규표현식/})
db.area.find({county:/시$/}).count() // 시로 끝나는 county 도큐먼트의 개수
정규 표현식 사용을 위한 메타 문자
메타문자 | 설명 | 예시 |
* | 앞의 문자를 0개 이상 찾음 | zo* --> z, zo, zoo,zooo |
+ | 앞의 문자를 1개 이상 찾음 | zo+ --> zo, zoo, zooo |
? | 앞의 문자를 0개나 1개 찾음 | zo? --> z,zo |
^ | ^문자열 : 문자열로 시작하는 것을 다 찾음 ^[^문자열] : 문자열로 시작하는 것을 제외하고 다 찾음 |
^박 : 박, 박수 ^[^박] : 홍길동, 김철수 |
$ | $문자열 : 문자열로 끝나는 것을 다 찾음 | $박 : 수박, 박박 |
. | '\n'을 제외한 모든 단일 문자 검색 | a.c --> abc, a1c,a-c,a?c |
[ ] | 식의 시작과 끝을 표시 | [1-4] --> 1,2,3,4 |
{ } | 수량자 식의 시작과 끝 표사 | a{2,3} --> aa, aaa |
| | 둘 이상의 항목에서 선택 | (z|f)ood --> zood, food |
/ | 리터럴 정규식 패턴의 시작과 끝 | /g --> 전역 /i --> 대수문자 무시 |
\ | 다음에 오는 문자를 특수 문자, 리터럴, 이스케이프로 표시 | \n : 개행문자 \( : ( \\ : \ |
\b | 단어와 공백 사이의 위치를 검색 | er\b --> er뒤에 문자가 없는 모든 것 |
\B | 공백이 아닌것의 위치를 탐색 | er\B --> er뒤에 공백이 아닌 모든 것 |
\d | 숫자를 찾음 | \d[2] --> 12, 34, 56, 13 |
\D | 문자를 찾음 | \D[2] --> ab, cd, ef, af |
\w | A-Z, a-z, 0-9, _를 찾는다.[A-Za-z0-9_] | \w --> jung, kwang, one |
\W | \w를 제외한 모든 것[^A-Za-z0-9_] | \W --> '',!@#$%^&*() |
[xyz] | xyz중 하나를 찾음 | [xyz] --> x,y,z |
[^xyz] | xyz가 아닌 모든 것 | [^xyz] --> a,b,c,d,e,1,2,3 |
-a[z] | 지정한 범위에서 문자를 찾음 | [a-z] --> 모든 소문자 |
[^a-z] | 지정한 범위가 아닌 모든 것을 찾음 | [^a-z] --> 소문자가 아닌 모든 것 |
{n} | n개를 찾음 | o{2} --> oo |
{n,} | n개 이상을 찾음 | o{2,} --> oo,ooo,oooo |
{n,m} | n개 이상 m개 이하를 찾음 | o{2,3} --> oo,ooo |
(Pattern) | Pattern을 찾고 일치하는 항목 저장 | (ch\sec)[1-9] --> cha1 ~ cha9 |
(?:pattern) | Pattern을 찾지만 저항하진 않음 | Industr(?:y|ies) --> Industry | Industries |
(?=pattern) | 일치 항목을 찾은 후 일치한 텍스트의 앞에서 다음 일치 항목에 대해 검색 | ^(?=.*\d).{4,8}$ --> 4-8개의 문자로 구성되고 적어도 하나의 숫차를 포함. |
(?!pattern) | 일치하지 않은 항목을 찾은 후 다음 일치 항목에 대한 검색 시작 | \b(?!th)\w+\b --> th로 시작하지 않는 단어 검색 |
문자열 연산자
- $regex : 정규 표현식과 맞는 도큐먼트 선택(regular expression)
- 몽고디비의 정규표현식 flag(생략가능)(JS 문법)
- i (Ignore Case): 대소문자 무시
- m (Multi Line): 앵커(^) 사용시 \n 무력화
- x : 정규식 내의 공백 무시
- s : (.)을 사용할 때 \n 포함해서 매치
- g (global) : 문자열 내의 모든 패턴 검색
- u (unicode) : 유니코드 전체를 지원
- y (sticky) : 문자 내 특정 위치에서 검색을 진행하는 'sticky' 모드를 활성화
- 몽고디비의 정규표현식 flag(생략가능)(JS 문법)
//db.컬렉션.find({필드 : {$regex: 정규표현식}})
db.area.find({county:{$regex:/구$/,$gte:"아",$lt:"자"}},{county:true})
// "구"로 끝나면서 첫글자의 초성이 "ㅇ"인 county 출력
- $text : 문자열 검색
- 제목이나 본문 등 텍스트가 많은 경우에 (컬렉션 전체에서) 원하는 텍스트를 쉽게 검색하는 방법
- 사용하려면 "인덱스"가 필요함.
- $text와 같이 쓰이는 연산자들
연산자 | 설명 |
$search | 검색성 설정, 검색어를 포함한 도큐먼트 검색 |
$language | 언어 설정(영어: en, 프랑스어 : fr) |
$caseSensitive | 대소문자 구별 여부 설정 |
$diacriticSensitive | 알파벳 위아래에 붙는 기호 무시 여부 설정 |
- 인덱스 만들기
// db.컬렉션.createIndex({필드 : 인덱스 이름})
db.inventory.createIndex({item:"text", tags:"text"})
// item과 tags에 대하여 인덱스 생성, 인덱스 이름은 text
- $search로 검색하기
//db.컬렉션.find({$text:{$search:'검색할 것'}})
// 사용법1 : 그냥 검색
db.inventory.find({$text:{$search:"hello"}})
// 사용법2 : or
db.inventory.find({$text:{$search:"red blank"}}) // red 또는 blank
// 사용법3 : and
db.inventory.find({$text:{$search:'"red" "blank"'}}) // red이고 blank
// 사용법4 : 찾을건 찾고 제외할것은 제외하기
db.inventory.find({$text:{$search:"red -blank"}}) // red를 찾되, blank는 제외
커서 Cursor
- MongoDB는 커서를 사용하여 find()의 결과를 반환한다
- 커서는 쿼리 결과에 대한 포인터
- 커서를 이용하여 결과 갯수를 제한하거나 결과 중 몇 개를 건너 뛰거나, 여러 키를 조합한 결과를 정렬하는 등의 조작이 가능하다.
- 커서 만들기
// var 변수명 = db.컬렉션.find()
var cursor = db.rating.find()
cursor
- 한개 씩 읽기와 함수 적용
// 한개씩 읽기
// 커서.next()
cursor.next()
// 함수 적용
// 커서.forEach(function(x) {})
cursor.forEach(function(x) {print(x.rating)})
// rating 값을 하나씩 출력
- 건너뛰기
//var 변수 = db.컬렉션.find().skip(건널뛸 숫자)
var cursor = db.rating.find().skip(5)
- 제한
// var 변수명 = db.컬렉션.find().limit(제한할 개수)
var cursor = db.rating.find().limit(5)
$(배열 위치 연산자)
- 쿼리 도큐먼트와 일치하는 배열 요소 및 요소의 위치를 알아내서 접근한다.
- 쿼리하는 값의 배열 내 인덱스를 몰라도 접근할 수 있다.
// db.inventory.find({필드:값},{"배열 필드.$":true})
db.inventory.find({"tags":"red"},{"tags.$":true})
// tags 필드의 값이 red인 도큐먼트의 tags의 red만 출력
$where
- 키/값 쌍만으로 정확하기 표현할 수 없는 쿼리도 있다.
- $where 절로 임의의 자바 스크립트를 쿼리의 일부분으로 실행할 수 있다.
- 보안상의 이유로 자제된다.
- 다른 쿼리보다 속도가 느리므로 반드시 필요한 경우에만 사용해야한다.
db.컬렉션.find({$where : function() {}})
정확하 결과는 아니나 자바 스크립트 함수가 사용될 수 있음을 확인.
728x90
반응형
'DB > MongoDB' 카테고리의 다른 글
[MongoDB] 14. 집계명령어 - 고급 스테이지, 여러가지 스테이지 (0) | 2022.12.17 |
---|---|
[MongoDB] 13. 집계명령어 - aggregate, $project, $match, $group (0) | 2022.10.17 |
[MongoDB] 11. 쿼리작성하기 - 배열 요소,배열 연산자로 쿼리하기 (0) | 2022.10.09 |
[MongoDB] 10. 쿼리작성하기 - 타입, 논리 연산자로 비교하기 (0) | 2022.10.09 |
[MongoDB] 9. 쿼리작성하기 - 연산자로 쿼리하기 (0) | 2022.10.05 |