일반적인 순회방법으로 최솟값이나 합을 구하는 것은 O(N)
구간트리를 사용할 경우 O(logN)
주어진 배열의 구간을 표현하는 이진 트리를 만드는 것
배열의 길이가 15일 때 세그먼트 트리의 각 노드가 표현하는 구간을 나타낸 것
맨 위 노드가 루트이고, 아래는 자식 노드들을 나타냄
최소값을 구하는 문제였으므로
객체를 이용해 가장 작은 단위로 나눈 다음, 최소값을 노드의 값으로 정하면서 올라옴
그리고 겹치는 범위를 찾는 로직도 비슷하게 보임
좌표평면 상의 다양한 점들을 입력받아 가장 가까운 두 점 사이의 거리를 리턴
효율적인 알고리즘은 O(N*logN)의 방법이 있다고 함
분할정복, 병합정렬을 이용해 해결
단 단순히 분할정복을 하면 인접하지 않은 점과의 거리는 구할 수 없기에 이점을 주의해야 함..
$eq EQual 기본 연산자
$ne Not Equal
$gt Greater Than
$lt Less Than
$gte Greater Than or Equal to
$lte Less Than or Equal to
{필드 : {연산자 : 값}}
{"tripduration" : {"$lte" : 70}}
과 같이 사용 70보다 작거나 같은 경우 쿼리
{"tripduration" : {"$lte" : 70}, "usertype":{"$ne": "Subscriber" }}
과 같이 이어서 사용
$and 모든 쿼리와 일치 , 기본 연산자
$or 쿼리 중 하나라도 일치
$nor 주어진 모든 쿼리와 일치하지 않음
{ 연산자 : [ {쿼리1} , {쿼리2} ] }
>> 여러 조건을 처리하기 때문에 배열 위치
$not 주어진 쿼리와 일치하지 않음
{ $not : { 쿼리 } }
>> 단순이 뒤에 오는 조건만 부정하기에 배열이 필요없음
{ "$and" : [ { 필드1 : {조건1} }, { 필드1 : {조건2} } ] }
{ { 필드1 : {조건1} }, { 필드1 : {조건2} } }
>> 생략되면 기본은 $and
{ 필드1 : {조건1, 조건2} }
같은 필드에 대한 조건이므로 함축 가능
동일한 연산자를 두 번 이상 포함할 때 $and
를 명시하여 사용
표현 연산자
$expr
집계 표현식
$필드
로 해당 필드의 값을 가져올 수 있음
배열 연산자
$push
js와 동일한 기능, 배열이 아닌 필드에 사용하면 필드 타임을 배열로 바꿈
배열 요소로 쿼리할 때는 순서가 중요
$all
배열 요소와 순서에 상관없이 지정된 요소가 포함된 모든 도큐먼트를 찾을 수 있는 연산자
$size
배열의 길이에 따라 결과 제한하는 연산자
$find
에 프로젝션을 추가하면 원하는 정보만 결과로 가져올 수 있다
$find(쿼리, projection)
$find(쿼리, {price: 1, name: 1})
1 - 포함, 0 - 제외
$elemMatch
첫번째 인자에서 쓰일 경우, 배열 필드의 서브 도큐먼트 필드가 쿼리와 일치하는 문서를 찾는다
두번째 인자에서 쓰일 경우, 지정된 기준과 일치하는 요소가 하나 이상있는 배열 요소만 프로젝션
sub document에 접근하는 방법
도큐먼트 안의 도큐먼트에 접근하는 방법은
객체에 접근하듯이 dot notation을 쓰면됨
배열에 중첩된 document에 접근
dot notation으로 배열의 인덱스 표현(0부터 시작되는 것 동일)
Aggregation Framework
aggrewgate로 MQL보다 다양한 쿼리를 작성 가능
파이프라인의 각 단계 순서대로 데이터 처리