빅데이터 부트캠프 50일차
데이터 import (리눅스 -> MongoDB)
- mongoimport -d DB명 -c 콜렉션명 --port 포트번호 --file 보낼 파일이 있는 위치
데이터 export (MongoDB -> 리눅스)
- mongoexport -d DB명 -c 콜렉션명 -o 어떤 파일명으로 저장할건지 --port 포트번호
- MongoDB가 아닌 리눅스 쉘에서 실행해야하며 리눅스의 현재 위치에 데이터를 저장함
공간 정보 인덱스 연산자 (공통)
$geoWithin = 특정 영역안에 완전히 있는 것만 검색
$geoIntersects = 특정 영역에 완전히 있지 않아도 겹치는 것까지도 검색
$near = 입력한 좌표를 기준으로 가까운 순서부터 반환
(GeoJSON 데이터 - 2dsphere index, Legacy 데이터 - 2d index)
2dsphere index
- $centerSphere = 반지름이 라디안 단위인 원
- $centerSphere를 이용해 반지름을 mile 단위로 표현하고 싶으면 /3963.2, km 단위로 표현하고 싶으면 /6379.1
- $nearSphere+$maxDistance = 반지름이 m 단위인 원 ($nearSphere로는 원의 중심, $maxDistance로는 반지름 설정)
2d index
- $center = 반지름이 km 단위인 원
- $polygon = 지정한 좌표를 연결한 도형 (처음 좌표를 마지막에 입력할 필요 X)
- $box = 지정한 두 좌표를 점으로 가지는 정사각형
- $centerSphere
Text index
- 제목, 설명 등 컬렉션 내에 있는 필드의 텍스트와 일치시키는 쿼리를 할 때 사용
- createIndex() 함수로 생성하지만, 내부 필드의 값을 “text”로 지정하여 수행
(내부 필드의 값을 "text"로 지정한 필드에서만 $search로 지정한 문자열을 찾음)
- db명.컬렉션명.find({$text: {$search: "조건 문자열"}})
- 조건 문자열 입력시 띄어쓰기로 단어를 구분하여 여러 단어 입력 가능
- 조건 문자열 입력시 단어 앞에 -를 붙이면 다른 조건들에 해당 되어도 -를 붙인 단어를 포함하고 있으면 제외
TTL(Time To Live) index
- 특정 시간 이후 또는 특정 시간의 컬렉션에서 문서를 자동으로 제거하는 데 사용하는 특수 인덱스
- 현재 시간(new Date())을 값으로 같는 키를 인덱스로 지정해야 적용 가능
- createIndex() 함수로 생성하지만 두번째 인자에 {expireAfterSeconds:몇초가 지나면 삭제될지 숫자 입력} 추가
집계 프레임워크(Aggregation Framework)
- MongoDB 내 분석 도구의 모음으로 하나 이상의 컬렉션에 있는 문서에 대한 분석을 수행
- 파이프라인 개념을 기반으로 수행
- aggregate([]) 함수 이용 (입력하는 연산자의 순서 중요!)
- $match = 조건 문자열 지정, $project = 어떤 필드들을 출력하고 출력하지 않을지 설정
- $sort = 지정 필드 오름차순(1), 내림차순(-1) 정렬 지정, $limit = 출력할 문서 개수 설정
- $project와 $limit를 혼용하는 경우가 있는데 $project를 먼저 실행하면 모든 문서 탐색 후 명령을 실행하고
$limit를 먼저 실행하면 limit로 문서를 정해놓은 개수만큼만 탐색후 명령을 실행하기 때문에 $limit를 $project보다 먼저 입력하는 것이 효율적
- $skip = 문서 출력시 처음으로부터 몇번째 문서를 건너뛰고 출력할 건지 지정
- $slice('키', 숫자) = 처음부터 지정한 숫자까지의 인덱스 번호에 해당하는 키값(배열)의 원소 출력
- $slice('키', 시작숫자, 끝숫자) = 지정한 인덱스 숫자 범위에 해당하는 키값(배열)의 원소 출력
- $size = 키값(배열)의 원소 개수 출력
- $out = 파이프라인의 결과를 다른 컬렉션에 저장
- $unwind = 특정한 필드의 키를 지정하여 키값(배열)을 가져오고, 해당 배열의 각 원소를 해체시켜 각 원소에 대한 문서 출력
- $group = 특정 조건을 만족하는 문서들을 하나의 그룹으로 그룹화
- $first = 맨 처음의 값을 출력
- $last = 맨 마지막의 값을 출력