누적기는 문서가 파이프라인을 통해 진행됨에 따라 상태를 유지하는 연산자입니다.
$ROOT는 루트 문서, 즉 현재 집계 파이프라인 단계에서 처리 중인 최상위 문서를 참조합니다.
문서로 컬렉션을 만들자 −
> db.demo582.insertOne({FirstName:"Chris",Age:21,createDate:new ISODate("2020-01-10")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce41fd2d90c177b5bcbd") } > db.demo582.insertOne({FirstName:"Chris",Age:21,createDate:new ISODate("2020-04-21")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce4ffd2d90c177b5bcbe") } > db.demo582.insertOne({FirstName:"Chris",Age:22,createDate:new ISODate("2020-02-11")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce59fd2d90c177b5bcbf") } > db.demo582.insertOne({FirstName:"Chris",Age:22,createDate:new ISODate("2020-01-12")});{ "acknowledged" : true, "insertedId" : ObjectId("5e91ce6efd2d90c177b5bcc0") }
find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -
> db.demo582.find();
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : ObjectId("5e91ce41fd2d90c177b5bcbd"), "FirstName" : "Chris", "Age" : 21, "createDate" : ISODate("2020-01-10T00:00:00Z") } { "_id" : ObjectId("5e91ce4ffd2d90c177b5bcbe"), "FirstName" : "Chris", "Age" : 21, "createDate" : ISODate("2020-04-21T00:00:00Z") } { "_id" : ObjectId("5e91ce59fd2d90c177b5bcbf"), "FirstName" : "Chris", "Age" : 22, "createDate" : ISODate("2020-02-11T00:00:00Z") } { "_id" : ObjectId("5e91ce6efd2d90c177b5bcc0"), "FirstName" : "Chris", "Age" : 22, "createDate" : ISODate("2020-01-12T00:00:00Z") }
다음은 Group Accumulator 연산자를 적용하는 쿼리입니다 -
> db.demo582.aggregate([ ... { ... "$group": { ... "_id": "$FirstName", ... "MaximumDate": { ... "$max": "$createDate" ... }, ... "count": { ... "$sum": 1 ... }, ... "details": { ... "$first": "$$ROOT" ... } ... } ... }, ... { ... "$project": { ... "MaximumDate": 1, ... "count": 1, ... "details": { ... "_id": "$_id", ... "FirstName": "$details.FirstName", ... "Age" : "$details.Age", ... } ... } ... } ... ])
이것은 다음과 같은 출력을 생성합니다 -
{ "_id" : "Chris", "MaximumDate" : ISODate("2020-04-21T00:00:00Z"), "count" : 4, "details" : { "_id" : "Chris", "FirstName" : "Chris", "Age" : 21 } }