Skip to content

3.1 mongo aggregration

couplewith edited this page Feb 21, 2023 · 5 revisions

3.1 mongo aggregration

mongo database의 sql 은 json으로 작동이 됩니다.


{
--
$group:
{
_id: <expression>, // Group key
<field1>: { <accumulator1> : <expression1> },
...
}
}

Field Description
_id Required. The _id expression specifies the group key. If you specify an _id value of null, or any other constant value, the $group stage returns a single document that aggregates values across all of the input documents. See the Group by Null example.
field Optional. Computed using the accumulator operators.

예제3 group 함수를 이용한 집계

다음과 같이 foo인덱스에서 { x: 1, y: 1 }가 포함된 경우 해당 인덱스를 사용하여 각 그룹의 첫 번째 문서를 찾을 수 있습니다


db.foo.aggregate([
  {
    $sort:{ x : 1, y : 1 }
  },
  {
    $group: {
      _id: { x : "$x" },
      y: { $first : "$y" }
    }
  }
])

예제2 group 함수를 이용한 집계


 db.counter_58.aggregate(
			{ $project : { _id:0, k : 1,  svc: 1,  pt : 2, statics: 1 } }
			);

	"result" : [		
                {
                        "statics" : {
                                "monthly" : {
                                        "201301" : 2
                                },
                                "daily" : {
                                        "20130109" : 2
                                }
                        },
                        "svc" : 10,
                        "pt" : "PC",
                        "k" : "308465661"
                }
        ],
        "ok" : 1

예제3 group 함수를 이용한 집계

	
db.counter_58.aggregate(
			{ $unwind :"$daily" },
			{ $project : { _id:0,  svc: 1,  pc : 1, statics : 1 } }
			);

  • $unwind : 입력 문서에서 배열 필드를 분해하여 각 요소에 대한 문서를 출력합니다. 각 출력 문서는 배열 필드의 값이 요소로 대체된 입력 문서

$unwind를 이용하면 size 필드를 출력합니다.

db.inventory.aggregate( [ { $unwind : "$sizes" } ] )
{ "_id" : 1, "item" : "ABC1", "sizes" : "S" }
--
{ "_id" : 1, "item" : "ABC1", "sizes" : "M" }
{ "_id" : 1, "item" : "ABC1", "sizes" : "L" }

group 함수를 위한 다양한 명령

이름 설명
$accumulator 사용자 정의 누산기 함수의 결과를 반환합니다.
$addToSet 각 그룹에 대한 고유한 식 값 의 배열을 반환합니다 . 배열 요소의 순서는 정의되지 않습니다. 버전 5.2 의 새로운 기능 $group그리고 $setWindowFields 와 함께 사용
$avg 숫자 값의 평균을 반환합니다. 숫자가 아닌 값을 무시합니다. 버전 5.2 의 새로운 기능  $setWindowFields와 함께 사용
$bottom 지정된 정렬 순서에 따라 그룹 내의 맨 아래 요소를 반환합니다.버전 5.2 의 새로운 기능 $group그리고 $setWindowFields 와 함께 사용
$bottomN n지정된 정렬 순서에 따라 그룹 내 하단 필드의 집계를 반환합니다 .버전 5.2 의 새로운 기능 $group그리고 $setWindowFields 와 함께 사용
$count 그룹의 문서 수를 반환합니다.파이프라인 단계 와 구별됩니다 $count.버전 5.0 의 새로운 기능 .$group$setWindowFields와 함께 사용할 수 있습니다
$first 각 그룹의 첫 번째 문서에서 값을 반환합니다. 순서는 문서가 정렬된 경우에만 정의됩니다. 버전 5.0 에서 변경 $setWindowFields. 하여 사용할 수 있습니다 
$firstN n그룹 내 첫 번째 요소의 집계를 반환합니다 . 문서가 정의된 순서로 있을 때만 의미가 있습니다. 버전 5.2 의 새로운 기능 .$group$setWindowFields 표현식을 사용할 수 있습니다
$last 각 그룹의 마지막 문서에서 값을 반환합니다. 순서는 문서가 정렬된 경우에만 정의됩니다. 버전 5.0 에서 변경 $setWindowFields를 사용할 수 있습니다. 
$lastN n그룹 내 마지막 요소의 집계를 반환합니다 . 문서가 정의된 순서로 있을 때만 의미가 있습니다. 버전 5.2 의 새로운 표현식 .$group$setWindowFields 사용할 수 있습니다 }
$max 각 그룹의 가장 높은 표현식 값을 반환합니다. 버전 5.0 에서 변경 : 단계 에서  $setWindowFields 사용.
$maxN n그룹에서 최대값 요소 의 집계를 반환합니다. 배열 연산자 와 다릅니다 $maxN.버전 5.2 의 새로운 기능으로 $group, $setWindowFields 사용 .
$mergeObjects 그룹별 입력 문서를 조합하여 생성된 문서를 반환합니다.
$min 각 그룹의 가장 낮은 표현식 값을 반환합니다.버전 5.0 에서 변경 : 단계 에서 사용할 수 있습니다 $setWindowFields.
$push 각 그룹의 문서에 대한 표현식 값의 배열을 반환합니다.버전 5.0 에서 변경 : 단계 에서 사용할 수 있습니다 $setWindowFields.
$stdDevPop 입력 값의 모집단 표준편차를 반환합니다.버전 5.0 에서 변경 : 단계 에서 사용할 수 있습니다 $setWindowFields.
$stdDevSamp 입력 값의 샘플 표준 편차를 반환합니다.버전 5.0 에서 변경 : 단계 에서 사용할 수 있습니다 $setWindowFields.
$sum 숫자 값의 합계를 반환합니다. 숫자가 아닌 값을 무시합니다.버전 5.0 에서 변경 : 단계 에서 사용할 수 있습니다 $setWindowFields.
$top 지정된 정렬 순서에 따라 그룹 내의 최상위 요소를 반환합니다.버전 5.2 의 새로운 기능 .가능$group그리고 $setWindowFields단계.
$topN n지정된 정렬 순서에 따라 그룹 내 상위 필드의 집계를 반환합니다 .버전 5.2 의 새로운 기능 .가능$group그리고 $setWindowFields단계.