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

MongoDB에서 중첩 문서를 집계하려면 어떻게 해야 합니까?

<시간/>

MongoDB에서 중첩 문서를 집계하려면 $group을 사용할 수 있습니다. 먼저 문서로 컬렉션을 만들어 보겠습니다. −

> db.aggregateDemo.insertOne(
...    {
...       "ProductInformation": [
...          {
...             "Product1": [
...                {
...                   Amount: 50
...                },
...                {
...                   Amount: 90
...                },
...                {
...                   Amount: 30
...                }
...             ]
...          },
...          {
...             "Product1": [
...                {
...                   Amount: 200
...                },
...                {
...                   Amount: 30
...                },
...                {
...                   Amount: 40
...                }
...             ]
...          },
...          {
...             "Product1": [
...                {
...                   Amount: 150
...                },
...                {
...                   Amount: 190
...                },
...                {
...                   Amount: 198
...                }
...             ]
...          }
...
...       ]
... });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04df58150ee0e76c06a04d")
}
> db.aggregateDemo.insertOne(
...    {
...       "ProductInformation": [
...          {
...             "Product1": [
...                {
...                   Amount: 100
...                },
...                {
...                   Amount: 1002
...                },
...                {
...                   Amount: 78
...                }
...             ]
...          },
...          {
...             "Product1": [
...                {
...                   Amount: 75
...                },
...                {
...                   Amount: 400
...                },
...                {
...                   Amount: 600
...                }
...             ]
...          },
...          {
...             "Product1": [
...                {
...                   Amount: 700
...                },
...                {
...                   Amount: 500
...                },
...                {
...                   Amount: 600
...                }
...             ]
...          }
...
...       ]
... });
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e04df93150ee0e76c06a04e")
}

다음은 find() 메서드를 사용하여 컬렉션의 모든 문서를 표시하는 쿼리입니다. -

> db.aggregateDemo.find().pretty();

이것은 다음과 같은 출력을 생성합니다 -

{
   "_id" : ObjectId("5e04df58150ee0e76c06a04d"),
   "ProductInformation" : [
      {
         "Product1" : [
            {
               "Amount" : 50
            },
            {
               "Amount" : 90
            },
            {
               "Amount" : 30
            }
         ]
      },
      {
         "Product1" : [
      {
         "Amount" : 200
      },
      {
         "Amount" : 30
      },
      {
         "Amount" : 40
      }
   ]
},
{
   "Product1" : [
      {
         "Amount" : 150
      },
      {
         "Amount" : 190
      },
      {
         "Amount" : 198
      }
   ]
}
]
}
{
   "_id" : ObjectId("5e04df93150ee0e76c06a04e"),
   "ProductInformation" : [
      {
         "Product1" : [
            {
               "Amount" : 100
            },
            {
               "Amount" : 1002
            },
            {
               "Amount" : 78
            }
         ]
      },
   {
      "Product1" : [
         {
            "Amount" : 75
         },
         {
            "Amount" : 400
         },
         {
            "Amount" : 600
         }
      ]
   },
   {
      "Product1" : [
         {
            "Amount" : 700
         },
         {
            "Amount" : 500
         },
         {
            "Amount" : 600
         }
      ]
   }
]
}

다음은 중첩 문서를 집계하는 쿼리입니다. -

> db.aggregateDemo.aggregate([
... {
...    $unwind:"$ProductInformation"
... },
... {
...    $unwind:"$ProductInformation.Product1"
... },
... {
...    $group:{
...       _id:null,
...       MaximumAmount:{
...          $max:"$ProductInformation.Product1.Amount"
...       }
...    }
... }
... ]);

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" : null, "MaximumAmount" : 1002 }