TIL 9.5
MongoDB(Advanced)
<비교연산자>
- $eq(Equal to): 지정된 값이 서로 같다. (상황에 따라 생략 가능하다.)
- $ne(Not Equal to): 지정된 값이 서로 같지 않다.
- $gt(Greater Than): 주어진 값보다 크다.
- $gte(Greater Than or Equal to): 주어진 값보다 크거나 동일하다.
- $lt(Less Than): 주어진 값보다 작다.
- $lte(Less Than or Equal to): 주어진 값보다 작거나 동일하다.
<논리연산자>
- $and: 주어진 모든 쿼리절과 일치하는지 여부를 확인
- $or: 주어진 쿼리절이 하나라도 일치하는지 여부를 확인
- $nor: 주어진 모든 쿼리절과 일치하지 않은지 여부를 확인
- $not: 주어진 쿼리와 일치하는지 여부를 확인 (배열 구문이 필요하지 않다)
<표현연산자>
- $expr
- 쿼리 내에서 집계 표현식(Aggregation Expression)을 사용할 수 있으며
{ $expr : { expression } } 구문을 사용한다.
- $expr를 이용해 변수와 조건문을 사용할 수 있다.
- $expr를 이용해 같은 도큐먼트 내의 필드들을 서로 비교할 수 있다.
$: 연산자를 사용할 때 사용하거나 필드 이름 자체가 아니라 해당 필드의 값을 불러올 때 사용한다.
<배열연산자>
- $push: 배열에 요소를 추가하거나 다른 유형의 값이었던 경우 배열 타입의 필드로 바꿀 수 있다.
- []을 사용할 경우: 지정된 배열 필드에 순서와 요소가 정확하게 일치하는 배열을 가진 도큐먼트를 찾는다.
- []을 사용하지 않을 경우: 지정된 배열 필드에 문자열로 주어진 요소가 포함된 모든 도큐먼트를 찾는다.
- $all: 배열 요소의 순서와 상관없이 지정된 요소가 포함된 모든 도큐먼트를 찾을 수 있다.
- $size: 지정한 배열 길이로만 쿼리하여 지정한 요소가 모두 배열에 포함된 도큐먼트만 반환된다.
<배열연산자와 Projection>
- 쿼리와 일치하는 모든 도큐먼트에 대해 해당 필드값을 볼 수 있다.
- < field >: 1 - 지정한 필드값 포함
- < field >: 0 - 지정한 필드값 제외
- 한번의 Projection에는 0과 1을 혼합 할 수 없다.
- 1과 0을 혼용할 수 있는 유일한 경우는 디폴트로 포함되는 _id 필드를 제외하도록 특별히 요청할 때이며, 이와 같은 요청이 없다면 _id 필드가 기본적으로 도큐먼트에 포함된다.
- $elemMatch(projection): 지정된 기준과 일치하는 요소가 하나 이상있는 배열 요소만 프로젝션한다.
- $elemMatch(query): 배열 필드에 서브 도큐먼트 필드가 쿼리와 일치하는 문서를 찾는다.
<배열과 서브도큐먼트 쿼리하기>
- 도큐먼트 안에 도큐먼트(서브도큐먼트)를 쿼리할 때는 Dot notaion이용
- 배열안에 서브도큐먼트 쿼리하기: 요소의 위치를 지정해야 한다.
(필드값).(배열 인덱스.중첩된 객체를 값으로 가지고 있는 필드).(서브도큐먼트 필드):(찾고있는 값)
<Aggregation Framework>
- 나열된 순서대로 단계가 실행되는 파이프 라인의 형태이다. 파이프라인은 각 단계 순서대로 데이터가 처리된다. 이 안의 데이터는 원본데이터를 수정하거나 변경하지 않는다.
- $match: 지정된 조건과 일치하는 문서만 다음 파이프라인 단계로 전달하도록 문서를 필터링한다.
- $project: 각 도큐먼트에서 해당 필드 값이 아닌 모든 필드를 필터링하는 단계
- $group: 들어온 데이터 스트림을 여러개로 그룹화 하는 연산자
( $match 등과 같은 필터링 단계가 없으면 데이터 요약, 계산 및 그룹화를 수행 할 때 원본 데이터를 수정하지 않는다는 점을 유의)