집계 시 고려해야할 점

파이프라인의 크기를 최대한 줄이는 것이 좋다. 왜냐하면, 파이프라인 처리에 100MB 이상의 메모리가 필요할 경우 스테이지 출력을 저장하기 위해 Disk를 사용하기 때문이다.

또한 $match, $sort에서만 인덱스를 사용가능하다는 점을 알고 있어야한다.

성능 관련 옵션

aggregate의 두번째 인자에 다음의 옵션을 사용할 수 있다.

db.my_coll.aggregate([ /* ... */ ], {
	explain: true,
	allowDiskUse: true,
	cursor: { batchSize: 1024 }
})

allowDiskUse 옵션

파이프라인 스테이지의 데이터가 크면 다음과 같은 오류를 만날 수 있다. 100MB를 넘길 경우 발생할 수 있다.

(https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/#memory-restrictions)

Error: command failed: {
    "errmsg" : "exception: Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.",
    "code" : 16945,
    "ok" : 0
}