05. 쿼리 작성하기
주요 내용#
- 전자상거래 데이터 모델 질의
 - MongoDB 쿼리 언어 상세
 - 쿼리 셀렉터와 옵션
 
조회 쿼리#
- find vs findOne
- findOne: 도큐먼트 반환
 - find: 커서 반환, 
limit과 같이 써야함 
 - js 셸에서 sort, limit, skip 의 순서는 중요하지 않음
 - 조회로 사용하는 필드의 성능을 위해 인덱스를 고려
 
페이지네이션#
특정 필드만 조회#
정규식 조회#
특정 범위#
MongoDB 쿼리 언어 상세#
질의 조건과 셀렉터#
- 문자열 범위 연산도 가능함
- 범위 연산: 
$lt$lte$gt$gte 
 - 범위 연산: 
 - 집합 연산
$in: 지정된 배열 원소 중 하나라도 있는 도큐먼트 검색$all: 지정된 배열 원소 모두가 있는 도큐먼트 검색$nin: 지정된 배열 원소 아무것도 없는 도큐먼트 검색 (인덱스 사용 불가)
 - 배열
$elemMatch: 배열내 서브도큐먼트에서 두 개 이상의 속성이 매치되는 것을 찾는 경우$size: 인덱스 사용 불가
 - 자바스크립트 쿼리 연산자(
$where) 는 인젝션 공격에 취약하므로 주의해서 사용 - 정규표현식 (
$regex)- prefix 타입 쿼리를 제외하곤 인덱스를 사용할 수 없음
 - 대소문자 구별을 무시하는 
ioption도 인덱스 사용 불가 - 대부분 선택자보다 실행시간이 오래걸림
 
 
쿼리 옵션#
- 프로젝션
- 반환할 필드 선택해서 받을 수 있음
 - 옵션
- 1: 포함 필드
 - 0: 제외 필드
 
 - 예시
db.products.find({}, {'slug': 1}): slug 필드만 포함db.products.find({}, {'sku': 0, 'details': 0}): sku, details 제외한 나머지 필드
 
 $slice: 배열 필드 슬라이스db.products.find({}, {$slice: 3}): 처음부터 3개db.products.find({}, {$slice: 3}): 처음부터 3개db.products.find({}, {$slice: -3}): 마지막에서 3개
- skip. limit. sort 는 다룸