Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

시스템 변수 $$ROOT에 그룹 누산기 연산자 $first를 적용하여 루트 문서에 대한 참조를 반환하시겠습니까?


누적기는 문서가 파이프라인을 통해 진행됨에 따라 상태를 유지하는 연산자입니다.

$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 }
}