728x90
반응형
문자열 연산자
문자열 연산자 | 기능 |
$concat | 두 개 이상의 문자열을 단일 문자열로 연결 |
$strcasecmp | 대/소문자를 구분하지 않는 문자열 비교를 하며, 숫자를 반환 한다. |
$substrBytes | 문자열의 부분 문자열을 만듦 |
$toLower | 문자열을 모두 소문자로 |
$toUpper | 문자열을 모두 대문자로 |
$concat
db.text.aggregate([
{
$project : {text:1,"concat":{$concat:["$text1","-","$text2"]}}
}
])
$strcasecmp
db.text.aggregate([
{
$project : {text:1,"strcasecmp":{$strcasecmp:["$text1","$text2"]}}
}
])
$substrBytes
db.text.aggregate([
{
$project : {text1:1,"substring":{$substrBytes:["$text1",1,2]}}
}
])
// 1번 인덱스부터 2개
$toLower
db.text.aggregate([
{
$project : {_id:0,text2:1,"Lower":{$toLower:"$text2"}}
}
])
$toUpper
db.text.aggregate([
{
$project : {_id:0,text1:1,"Upper":{$toUpper:"$text1"}}
}
])
산술 연산자
산술 연산자 | 기능 |
$add | 첫 번째 숫자와 두 번째 숫자를 더함. |
$divide | 첫 번째 숫자를 두 번째 숫자로 나눔 |
$mod | 첫 번째 숫자를 나머지 두 번째 숫자로 나눔 |
$multiply | 숫자 배열을 곱함 |
$subtract | 첫 번째 숫자에서 두 번째 숫자를 뺌. |
$add
db.rating.aggregate([
{
$project : {_id:0,rating:1,user_id:1,"add":{$add:["$rating","$user_id"]}}
}
])
$divde
db.rating.aggregate([
{
$project : {_id:0,rating:1,user_id:1,"divide":{$divide:["$rating","$user_id"]}}
}
])
$mod
db.rating.aggregate([
{
$project : {_id:0,rating:1,user_id:1,"mod":{$mod:["$rating","$user_id"]}}
}
])
$multiply
db.rating.aggregate([
{
$project : {_id:0,rating:1,user_id:1,"mul":{$multiply:["$rating","$user_id"]}}
}
])
$subtract
db.rating.aggregate([
{
$project : {_id:0,rating:1,user_id:1,"sub":{$subtract:["$rating","$user_id"]}}
}
])
날짜/시간 연산자
날짜/시간 연산자 | 기능 |
$dayOfYear | 연 중의 일 (1 ~ 366 사이) |
$dayOfMonth | 월 중의 일 (1 ~ 31 사이) |
$dayOfWeek | 주 중의 일 (1 ~ 7 사이, 1은 일요일을 의미) |
$year | 날짜의 연 부분 |
$month | 날짜의 월 부분 (1 ~ 12 사이) |
$week | 연 중 주 (0 ~ 53 사이) |
$hour | 시간 (0 ~ 23 사이) |
$minute | 분 (0 ~ 59 사이) |
$second | 초 (0 ~ 59 사이) |
$millisecond | 시간 중 밀리초 (0 ~ 999 사이) |
$dayOfYear , $dayOfWeek
db.dates.aggregate([
{
$project : {
_id : 0,
today:1,
dayOfYear : {$dayOfYear : "$today"},
dayOfWeek : {$dayOfWeek : "$today"},
}
}
])
$year, $month, $dayOfMonth, $hour, $minute, $second, $millisecond
db.dates.aggregate([
{
$project : {
_id : 0,
today:1,
year : {$year : "$today"},
month : {$month : "$today"},
day : {$dayOfMonth : "$today"},
hour : {$hour : "$today"},
minute : {$minute : "$today"},
second : {$second : "$today"},
millisec : {$millisecond : "$today"}
}
}
])
$week
db.dates.aggregate([
{
$project : {Week : {$week : "$today"}}
}
])
$_id를 날짜로 변환하기
- $toDate를 통해 변환할 수 있음.
- ObjdctId는 다음과 같이 구성되어 있음.
db.dates.aggregate([
{
$project : {date : {$toDate : "$_id"}}
},
{
$project : {
createAt : {
year : {$year : "$date"},
month : {$month : "$date"},
day : {$dayOfMonth : "$date"},
hour : {$hour : "$date"},
minute : {$minute : "$date"},
second : {$second : "$date"}
}
}
}
])
논리/비교 연산자
논리/비교 연산자 | 기능 |
$and | 배열 내의 요소들의 and 연산 |
$cmp | 두 값을 비교하여 결과값을 반환, 동일하면 0 반환 |
$cond | if...then...else조건 부 논리 x ? y : z 삼항 연산자와 유사함 |
$eq | 두 값이 동일한지 확인 |
$gt($gte) | 하나의 값이 다른 하나의 값보다 큰지(크거나 같은지) 확인 |
$ifNull | null 값/표현식을 지정된 값으로 변환 |
$lt($lte) | 하나의 값이 다른 하나의 값보다 작은지(작거나 같은지) 확인 |
$ne | 두 값이 서로 다른지 확인 |
$not | 주어진 값의 반대 조건을 반환 true -> false |
$or | 배열 내의 요소들의 or 연산 |
$and
db.nums.aggregate([
{
$project : {and : {$and : [true,true, true]}}
}
])
$cmp
db.nums.aggregate([
{
$project : {cmp : {$cmp : ["$i1","$i2"]}}
}
])
db.nums.aggregate([
{
$project : {cmp : {$cmp : ["$i1","$i1"]}}
}
])
$cond
db.nums.aggregate([
{
$project : {
GoodBad : {
$cond : {if : {$gt : ["$i1",1]},then : "GOOD", else : "BAD"}
}
}
}
])
$eq
db.nums.aggregate([
{
$project : {eq : {$eq : ["$i1","$i2"]}}
}
])
$gt($gte)
db.nums.aggregate([
{
$project : {gt : {$gt : [1,30]},gte : {$gte : ["$i1","$i2"]}}
}
])
$lt($lte)
db.nums.aggregate([
{
$project : {_id:0,lt:{$lt:[1,2]},lte:{$lte:[1,1]}}
}
])
$ifNull
db.nums.aggregate([
{
$project : {_id:0,ifNull:{$ifNull:[null,"Null 입니다."]}}
}
])
$ne
db.nums.aggregate([{$project:{_id:0,ne:{$ne:[1,2]}}}])
$not
db.nums.aggregate([{$project:{_id:0,not:{$not:[true]}}}])
$or
db.nums.aggregate([{$project:{_id:0,or:{$or:[true,false,false]}}}])
배열 연산자
배열 연산자 | 기능 |
$setEquals | 두 개의 집합이 완전히 같은 요소를 가지면 true |
$setIntersection | 두 개의 집합이 공통적으로 존재하는 요소의 배열을 반환 |
$setDifference | 두 번째 집합에 없는 첫 번째 집합의 요소를 반환 |
$setUnion | 두 집합의 합집합을 반환 |
$setIsSubset | 두 번째 집합이 첫 번째 집합의 부분 집합이면 true |
$anyElementTrue | 집합의 요소 중 그 어느 하나라도 true면 true |
$allElementsTrue | 집합의 모든 요소가 true면 true |
$not | 주어진 값의 반대 조건을 반환 |
$or | 배열의 값 중 어느 하나라도 true 인 경우 true |
$setEquals
db.array.aggregate([
{
$project : {IsEqual : {$setEquals:[[1,2,3,4],[2,3,4]]}}
}
])
$setIntersection
db.array.aggregate([
{
$project : {InterSec : {$setIntersection:[[1,2],[1,2,3,4,5]]}}
}
])
$setDifference
db.array.aggregate([
{
$project : {Diff : {$setDifference:[[1,2,3,4],[2,3,4]]}}
}
])
$setUnion
db.array.aggregate([
{
$project : {Union : {$setUnion:[[1,2,3,4],[5,6,7]]}}
}
])
$setIsSubset
db.array.aggregate([
{
$project : {IsSubset : {$setIsSubset:[[1,2,3,4],[5,6,7]]}}
}
])
$anyElementTrue
db.array.aggregate([
{
$project : {True : {$anyElementTrue:[[true,true,false,true]]}}
}
])
$allElementsTrue
db.array.aggregate([
{
$project : {AllTrue : {$allElementsTrue:[[true,true,false,true]]}}
}
])
$not
db.array.aggregate([
{
$project : {converse: {$not:[false]}}
}
])
$or
db.array.aggregate([
{
$project : {or: {$or:[true,false,true]}}
}
])
뷰(view)
- 다른 컬렉션에서 정보를 집계한 가상 컬렉션
- 뷰에 집계한 정보는 저장되지 않음.
- 뷰는 직접 쓰고, 수정과 삭제는 불가능함.
db.createView(
"testView",
"rating",
[{$project : {user_id:1}}]
)
db.testView.drop()
728x90
반응형
'DB > MongoDB' 카테고리의 다른 글
[MongoDB] 17. 데이터 모델링과 인덱스 - 데이터 모델링 (0) | 2022.12.18 |
---|---|
[MongoDB] 16. 집계명령어 - 트랜잭션 (0) | 2022.12.18 |
[MongoDB] 14. 집계명령어 - 고급 스테이지, 여러가지 스테이지 (0) | 2022.12.17 |
[MongoDB] 13. 집계명령어 - aggregate, $project, $match, $group (0) | 2022.10.17 |
[MongoDB] 12. 쿼리작성하기 - 정규 표현식, 문자열 연산자, Cursor, $(배열 위치 연산자), $where 연산자 (1) | 2022.10.13 |