본문 바로가기

MongoDB

[MongoDB] 확장 검색 쿼리 - 집계 파이프 라인연산자 종류

 

파이프라인에서 사용할 수 있는 연산자를 종류별로 나눠서 구분해 보자.

 

 

STEP#01. 문자열 연산자

 

$concat 연산자

 

$concat 연산자는 두 개 이상의 문자열을 하나의 문자열로 연결한다.

예시> { $concat : { "$ltem", "-", "$description"] }

 

 

$indexOfBytes 연산자

 

$indexOfBytes 연산자는 바이트 수로 인덱스를 반환한다.

예시> { $indexOfBytes : [ "$Desk", "-"] }

 

 

 

$indexOfCP 연산자

 

$indexOfCP 연산자는 문자열에서 특정 문자가 처음 생겼을 때 인덱스 코드 포인트( CP )에서 찾아내면 

 

필드내의 문자열을 분석하는 데 도움이 된다.

예시> { $indexOfCP : [ "$Desk", "-" ] }

 

위 쿼리에서 처음 등장하는 하이픈 문자를 검색해보면

 

문자열 인코딩이 다르면 사용하는 연산자가 달라지는데, 뒤에 CP를 붙인 것은 UTF-8 문자열에서 작동한다.

 

 

$split 연산자

 

문자열로 특정 인덱스를 찾는 것은 지정된 연산자에 유용하지만,

 

구분 기호를 기준으로 문자열을 배열 분할하는 것도 도움이 될 수 있다.

 

쿼리를 복잡하게 작성해 각 구분 기호를 찾을 수도 있다.

 

문자열로 특정 인덱스를 찾는 데 단일 명령으로 $split을 사용할 수 있다.

 

아래 쿼리에서 필드의 위치의 각 구성요소를 배열로 구분한다.

 

예시> { $split: [ "$Desk", "-" ] }

 

 

$strLenBytes 연산자

 

$strLenBytes 연산자를 사용해 문자열 길이를 바이트 단위로 알아낼 수 있다.

 

예시> { $strLenBytes : "$Desk" }

 

 

 

$strLenCP 연산자

 

UTF-8 문자열의 길이를 반환한다.

 

예시> { $strLenCP : "$name" }

 

 

 

$strcasecmp 연산자

 

$strcasecmp 연산자는 두 개의 문자열의 대소를 비교하여 크면 1을 반환하고 작으면 -1, 같으면 0을 반환한다.

 

예시> { $strcasecmp : [ "$quarter", "13q4" ] }

 

 

 

$substr 연산자

 

$substr 연산자는 ASCII 문자열의 일부분을 잘라서 반환한다.

 

값에 문자열, 시작문자 위치, 문자길이 순으로 넣는다.

 

예시> { $substr : [ "$quarter", 2, 1 ] }

 

 

 

 

$substrBytes 연산자

예시> { $substrBytes : [ "$snum", "$$z", 1 ] }

 

 

 

$substrCP 연산자

 

UTF-8 문자열의 일부분을 잘라서 반환한다.

 

값에 문자열, 시작문자 위치, 문자길이 순으로 넣는다.

예시> { $substrCP : [ "$quarter", 2, 1 ] }

 

 

 

$toLower 연산자

 

문자열의 모든 문자를 소문자로 만든다.

 

예시> { $toLower : "$item" }

 

 

$toUpper 연산자

 

문자열의 모든 문자를 대문자로 만든다.

 

예시> { $toUpper : "$item" }

 

 


 

STEP#02. 산술 연산자

 

$abs 연산자

 

$add 연산자

 

필드( 배열 )에 있는 숫자를 더한다.

 

예시> { $add : [ "$price", "$hous", 1 ] }

 

 

$ceil 연산자

 

$divide 연산자

 

첫 번째 숫자를 두번째 숫자로 나눈 몫

 

예시> { $divide : [ "$hours", 8 ] }

 

 

 

$exp 연산자

 

$floor 연산자

 

$in 연산자

 

$log 연산자

 

$log10 연산자

 

$mod 연산자

 

첫 번째 숫자를 두 번째 숫자로 나눈 나머지

 

예시> { $mod : [ "$hours", 8 ] }

 

 

$multiply 연산자

 

배열에 있는 숫자를 곱한다.

 

예시> { $multiply : [ "$price", "$hours", 1 ] }

 

 

$pow 연산자

 

$sqrt 연산자

 

$subtract 연산자

 

첫 번째 숫자에서 두 번째 숫자를 뺀다.

 

예시> $subtract : { "$hours", 8 ] }

 

 

$truc 연산자

 


 

STEP#03. 날짜연산

 

$toDate 연산자

 

주어진 값을 Date 타입으로 변환한다.

 

예시> { $toDate : "2020-10-02" }

 

 

$dayOfYear 연산자

 

올해 1월 1일부터 지금까지의 일수( 1 ~ 366 )

 

예시> { $dayOfYear : new Date( "2016-01-01" ) }

 

 

$dayOfMonth 연산자

 

이번달 1일부터 지금까지의 일수( 1 ~ 31 )

 

예시> { $dayOfMonth : new Date( "2016-01-01" ) }

 

 

 

$dayOfWeek 연산자

 

이번주 월요일부터 지금까지의 일수

일요일

월요일

화요일

수요일

목요일

금요일

토요일

1

2

3

4

5

6

7

 

예시> { $dayOfWeek : new Date( "2016-01-01" ) }

 

 

 

$year 연산자

 

날짜의 년도

 

예시> { $year : new Date( "2016-01-01T12:00:03Z" ) }

 

 

$month 연산자

 

날짜의 월

 

예시> { $month : new Date( "2016-01-01T12:00:02Z" ) }

 

 

$week 연산자

 

날짜의 연중 주( 0 ~ 53 )

예시> { $month : new Date( "2016-01-01T12:00:01Z" ) }

 

$hour 연산자

 

날짜의 시간( 0 ~ 23 )

 

예시> { $month : new Date( "2016-01-01T12:00:00Z" ) }

 

 

$minute 연산자

 

날짜의 분( 0 ~ 59 )

 

예시> { $month : new Date( "2016-01-01T12:00:01Z" ) }

 

 

$second 연산자

 

날짜의 초( 0 ~ 59 )

 

예시> { $second : new Date( "2016-01-01T12:00:02Z" ) }

 

 

$millisecond 연산자

 

날짜의 밀리초( 0 ~ 999 )

 

예시> { $millisecond : new Date( "2016-01-01T12:00:03Z" ) }

 

 

$dateToString

$isoDayOfWeek
$isoWeek

$isoWeekYear

 


 

STEP#04. 논리( 조건 ) 연산

 

$cond 연산자

 

if 자리에 조건을 쓰고, 참이면 then의 값을 반환, 거짓이면 else 의 값을 반환

 

예시> { $cond { if : { $gte : [ "$qty", 250 ] }, then : 30, else : 20 } }

 

 

 

$ifNull 연산자

 

첫 번째 요소 값이 존재하지 않으면, 두 번째 값을 반환한다.

 

예시> { $ifNull { "$description", "Unspecified" ] }

 

 

$switch 연산자

 


 

STEP#05. 불리언 연산

 

$and 연산자

 

주어진 모든조건을 만족하면 참( true )값을 그렇지 않으면 거짓( false )값을 반환한다.

예시> { $and : [ { $gt : [ "$qty", 250 ] }, { $lt : [ "$qty", 200 ] } ] }

 

 

 

$or 연산자

 

주어진 조건 중 하나라도 만족하면 참( true )값을 반환한다. 그렇지 않으면 거짓값( false )을 반환다.

 

예시> { $or : [ { $gt : [ "$qty", 250 ] }, { $lt : [ "$qty", 200 ] } ] }

 

 

 

$not 연산자

 

배열 속 값이 참이면 거짓( false )을, 거짓이면 참( true )을 반환한다.

 

예시> { $not : [ { $gt : [ "qty", 250 ] } ] }

 

 

 

$nor 연산자

 

주어진 조건 중 하나라도 만족하지 않으면 참( true )값을, 그렇지 않으면 거짓( false )값을 반환한다.

예시> { $nor : [ { $gt : [ "qty", 250 ] }, { $lt : [ "$qty", 200 ] } ] }

 

 


 

STEP#06. 비교연산

 

$cmp 연산자

 

$cmp( compare ) 연산자는 두 값을 비교하여 첫 번째 값이 크면 1, 두번째 값이 크면 -1, 같으면 0을 반환한다.

예시> { $cmp : [ "$qty", 250 ] }

 

 

$eq 연산자

 

$eq( equals ) 연산자는 주어진 두 값이 서로 일치하면 참값을, 아니면 거짓값을 반환한다.

 

예시> { $eq : [ "$qty", 250 ] }

 

 

 

$gt 연산자

 

$gt( greater than ) 연산자는 첫번째 값이 두 번째 값보다 크면 참, 아니면 거짓을 반환한다.

 

예시> { $gt : [ "$qty", 250 ] }

 

 

$gte 연산자

 

$gte( greather than or equals ) 연산자는 첫 번째 값이 두 번째 값보다 크거나 같으면 참, 아니면 거짓을 반환한다.

예시> { $gte : [ "$qty", 250 ] }

 

$lt 연산자

 

$lt( less than ) 연산자는  첫번째 값이 두 번째 값보다 작으면 참, 아니면 거짓을 반환한다.

 

예시> { $lt : [ "$qty", 250 ] }

 

 

 

$lte 연산자

 

$lte( less than or equals ) 연산자는 첫 번째 값이 두 번째 값보다 작거나 같으면 참, 아니면 거짓을 반환한다.

예시> { $lte : [ "$qty", 250 ] }

 

$ne 연산자

 

$ne( not equal ) 연산자는 주어진 두 값이 서로 일치하지 않으면 참, 일치하면 거짓 값을 반환한다.

예시> { $ne : [ "$qty", 250 ] }

 

 

$in 연산자

 

$in 연산자는 두 번째 값 안에 첫 번째 값이 속하면 true값을, 아니면 false를 반환하다.

 

예시> { $in : [ "bannanas" : "$in_stock"] } 

 

 

$nin 연산자

 

$nin( not in ) 연산자는 두 번째 값 안에 첫 번째 값이 속하면 false를, 아니면 true을 반환한다.

 

예시> { $nin : [ "bannanas" : "$in_stock"] } 

 

 

 

파이프라인 비교 연산자논리, 비교 연산자와 유사한 형식을 갖고 있지만,

 

비교하는 값이 배열 속에 있다는 점이 이전의 쿼리 비교 연산자와 다르다.

 

집계 파이프라인 비교 연산자 형식은 배열의 첫 번째 값을 두 번째 값과 비교하는 형식으로 되어있다.

 

 


 

STEP#07. 배열 연산자

 

$arrayElemAt 연산자

 

주어진 배열속의 정해진 순번의 요소를 반환한다.

예시> { $arrayElemAt : [ [ treu, false, 1 ], 1 ] }

 

$concatArrays 연산자

$filter 연산자

$indexOfArray 연산자

$isArray 연산자

$range 연산자

$reverseArray 연산자

$reduce 연산자

$size 연산자

$slice 연산자

$zip 연산자

$in 연산자

 

 


 

STEP#08. 집합 연산

 

$setEquals 연산자

 

두 배열이 같은 요소를 가지면 참값을 반환하고 아니면 거짓을 반환한다.

 

예시> { $setEquals : [ "$A", "$B" ] }

 

 

 

$setIntersection 연산자

 

두 배열의 공통된 요소를 모아서 배열로 반환한다.

 

예시> { $setIntersection : [ "$A", "$B" ] }

 

 

 

$setUnion 연산자

 

두 배열에 속한 모든 요소를 모아서 배열로 반환,  요소간 중복은 없다.

 

예시> { $setUnion : [ "$A", "$B" ] }

 

 

 

$setDifference 연산자

 

첫 번째 배열에는 있고, 두 번째 배열에 없는 요소를 모아서 배열로 반환한다.

 

예시> { $setDifference : [ "$A", "$B" ] }

 

$setSubset 연산자

 

두 번째 배열이 첫 번째 배열의 부분 집합이면 참값을 반환하고, 아니면 거짓을 반환한다.

 

예시> { $setSubset : [ "$A", "$B" ] }

 

 

 

$anyElementTrue 연산자

$allElementsTrue 연산자

 

 


 

STEP#09. 그룹 연산

 

$sum 연산자

$avg 연산자

$first 연산자

$last 연산자

$max 연산자

$min 연산자

$push 연산자

$addToSet 연산자

$stdDevPop 연산자

$stdDevSamp 연산자

 

 

나열된 연산자는 MongoDB 3.4에서 지원되고 있는 것이며,

 

일부 연산자는 MonogDB 3.2 이하 버전에서는 지원되지 않을 수도 있다.

 

그리고 더 중요한 점은 묻는 스테이지에서 여기 나열된 연산자를 모두 사용할 수 있는 것이 아니라는 점이다.

 

즉 스테이지에 맞게 그 스테이지에서 사용할 수 있는 연산자를 취사선택해서 사용해야 한다.

 

 

 

참고 : https://cloud.hosting.kr/techblog_190416_amazon-documentdb/