$sortByCount
지정된 표현식의 값을 기준으로 수신 문서를 그룹화한 다음 각 고유 그룹의 문서 수를 계산 및 정렬한다.
각 출력 문서에는 고유한 그룹화 값을 포함하는 필드(_id)와 해당 그룹화 또는 범주에 속하는 문서의 수(count)를 포함하는 필드의 두 필드가 포함된다.
문서는 내림차순으로 정렬된다.
{ $sortByCount: <expression> }
expression : 그룹화 할 식이다.
문서 리터럴을 제외한 모든 식을 지정할 수 있다.
필드 경로를 지정하려면 필드 이름 앞에 달러 기호를 $접두사로 붙이고 따옴표로 묶는다.
$sortByCount 단계는 다음 $group+ $sort 시퀀스와 동일하다.
{ $group: { _id: <expression>, count: { $sum: 1 } } },
{ $sort: { count: -1 } }
$bucket
{
$bucket: {
groupBy: <expression>,
boundaries: [ <lowerbound1>, <lowerbound2>, ... ],
default: <literal>,
output: {
<output1>: { <$accumulator expression> },
...
<outputN>: { <$accumulator expression> }
}
}
}
groupBy : 문서를 그룹화하는 표현식
-> 필드 경로를 지정하려면 필드 이름 앞에 달러 기호를 $접두사로 붙이고 따옴표로 묶는다.
boundaries : 그룹별로 각 버킷의 경계를 지정하는 표현식
-> 지정된 값은 오름차순이어야 하며 모두 동일한 유형이어야 한다.
default : 지정한 버킷에 속하지 않은 대상을 정의
output : 출력 문서에 포함할 필드를 지정하는 문서
$bucketAuto
{
$bucketAuto: {
groupBy: <expression>,
buckets: <number>,
output: {
<output1>: { <$accumulator expression> },
...
}
granularity: <string>
}
}
$facet
동일한 입력 문서 세트의 단일 단계 내에서 여러 집계 파이프라인을 처리한다.
각 하위 파이프라인에는 결과가 문서 배열로 저장되어 자체 필드로 출력된다.
이 $facet를 사용하면 단일 집계 단계 내에서 여러 차원 또는 패싯에 걸쳐 다면적 집계를 만들 수 있다. 다면적 집계는 데이터 검색 및 분석을 안내하는 여러 필터 및 분류를 제공한다.
여러 번 검색할 필요 없이 동일한 입력 문서 세트에서 다양한 집계를 활성화한다.
{ $facet:
{
<outputField1>: [ <stage1>, <stage2>, ... ],
<outputField2>: [ <stage1>, <stage2>, ... ],
...
}
}
Practice - $facet
var pipeline = [
{
$match: {
'tomatoes.critic.rating': { $gte: 0 },
'imdb.rating': { $gte: 0 }
}
}, {
$project: {
_id: 0,
tomatoes: 1,
imdb: 1,
title: 1
}
}, {
$facet: {
top_tomatoes_critic: [
{
$sort: { 'tomatoes.critic.rating': -1, title: 1 }
}, {
$limit: 50
}, {
$project: { title: 1 }
}
],
top_imdb: [
{
$sort: { 'imdb.rating': -1, title: 1 }
}, {
$limit: 50
}, {
$project: { title: 1 }
}
]
}
}, {
$project: {
movies_in_both: {
$setIntersection: [ '$top_tomatoes_critic', '$top_imdb' ]
}
}
}
]
$redact
{ $redact: <expression> }
$out
$merge
{ $merge: {
into: <collection> -or- { db: <db>, coll: <collection> },
on: <identifier field> -or- [ <identifier field1>, ...], // Optional
let: <variables>, // Optional
whenMatched: <replace|keepExisting|merge|fail|pipeline>, // Optional
whenNotMatched: <insert|discard|fail> // Optional
} }
-> into: "myOutput" / into: { db:"myDB", coll:"myOutput" }
Views
db.createCollection(
"<viewName>",
{
"viewOn" : "<source>",
"pipeline" : [<pipeline>],
"collation" : { <collation> }
}
)
db.createView(
"<viewName>",
"<source>",
[<pipeline>],
{
"collation" : { <collation> }
}
)
참고