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

  1. MongoDBでネストされた埋め込みドキュメントを更新しますか?

    MongDBで最適なドキュメントを更新するには、UPDATE()およびpositional($)演算子を使用します。ドキュメントを使用してコレクションを作成しましょう- > db.demo643.insertOne({ ...    details : [ ...       { ...          "CountryName":"US", ...          StudentDetails:

  2. ネストされたMongoDBドキュメントのキーのみを表示するにはどうすればよいですか?

    ドキュメントを使用してコレクションを作成しましょう- > db.demo740.insertOne({ ...    "details": ...    [ ...       { ...          Name:"Chris", ...          Age:21, ...          CountryName:&qu