MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDB集計入門:ネストされたドキュメント(配列オブジェクト)内の日付をグループ化してカウントする方法

MongoDBで集計処理を行うには、aggregate()メソッドを使用します。ネストされたドキュメント(配列内のオブジェクト)に格納された日付データをグループ化し、それぞれの出現回数をカウントするには、$unwindで配列を展開した後、$group演算子を使います。

この記事では、実際のコード例を通じて、その手順をわかりやすく解説します。

1. サンプルコレクションの作成

まず、insertOne()メソッドを使って、shippingdetailsという配列フィールドを持つドキュメントを含むコレクションを作成します。

> db.demo717.insertOne(
...     {
...       "shippingdetails":
...       [
...          {
...             duedate:"2020-04-29 22:33:04",
...          },
...          {
...             duedate:"2020-03-29 22:33:04",
...          },
...          {
...             duedate:"2020-04-29 22:33:04",
...          },
...          {
...             duedate:"2020-01-29 22:33:04",
...          }
...       ]
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea9b3cd85324c2c98cc4c30")
}

2. 登録されたドキュメントの確認

find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。

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

上記のクエリを実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5ea9b3cd85324c2c98cc4c30"),
    "shippingdetails" : [
        {
            "duedate" : "2020-04-29 22:33:04"
        },
        {
            "duedate" : "2020-03-29 22:33:04"
        },
        {
            "duedate" : "2020-04-29 22:33:04"
        },
        {
            "duedate" : "2020-01-29 22:33:04"
        }
    ]
}

3. 集計パイプラインで日付をグループ化してカウントする

ここからが本題です。ネストされたドキュメント内の日付をグループ化してカウントするには、以下の2段階のパイプラインを使用します。

  • $unwind: shippingdetails配列を展開し、各要素を個別のドキュメントとして扱えるようにします。
  • $group: 展開されたドキュメントをduedateの値ごとにグループ化し、$sum: 1で出現回数をカウントします。

具体的なクエリは以下のとおりです。

> db.demo717.aggregate(
...    {
...       $unwind:"$shippingdetails"},
...       {
...          $group: {
...             _id: "$shippingdetails.duedate",
...          count: {
...             $sum: 1
...          }
...       }
...    }
... )

このクエリを実行すると、日付ごとのグループ化結果とカウントが次のように表示されます。

{ "_id" : "2020-01-29 22:33:04", "count" : 1 }
{ "_id" : "2020-03-29 22:33:04", "count" : 1 }
{ "_id" : "2020-04-29 22:33:04", "count" : 2 }

まとめ

このように、$unwind$groupを組み合わせることで、ネストされた配列内のドキュメントに含まれる日付値を効率的に集計できます。同じ日付「2020-04-29」が2件存在するため、カウントが「2」と表示されている点に注目してください。この手法は、注文履歴や配送スケジュールなど、配列形式で保存されたデータの統計分析に幅広く活用できます。

  1. JavaScriptでJSONオブジェクトを2つのプロパティでグループ化してカウントする方法

    次のようなオブジェクトの配列があるとします。const arr = [ {"location":"Kirrawee","identity_long":"student"}, {"location":"Kirrawee","identity_long":"visitor"}, {"location":"Kirrawee","identity_long":&

  2. iOSアプリで現在の日付と時刻を取得・表示する方法【Swift入門】

    日付と時刻の扱いは、あらゆるプログラミング言語において非常に重要な要素です。特にモバイルアプリケーションの開発では、その重要性がさらに高まります。 天気予報アプリ、スケジュール管理アプリ、ゲームなど、日付や時刻を利用するアプリケーションは数多く存在します。この記事では、Swiftを使ってiOSアプリで現在の日付と時刻を取得する方法を解説します。 timeIntervalSince1970プロパティとは 現在の日付と時刻を取得するには、timeIntervalSince1970 インスタンスプロパティを使用します。このプロパティは、1970年1月1日0時0分0秒(UTC)からの経過秒数を返すも