MongoDB ディスティンクトアグリゲーション

Mehvish Ashiq 2023年1月30日
  1. MongoDB の識別集約
  2. MongoDB で distinct() メソッドを使用して個別の値を検索する
  3. MongoDB で distinct コマンドを使用して個別の値を検索する
  4. MongoDB で $group 集計演算子を使用して個別の値を検索する
MongoDB ディスティンクトアグリゲーション

この記事では、MongoDB の明確な集約について説明します。このチュートリアルでは、プロジェクトの要件に基づいて一意の/異なる値を見つけるために使用できるさまざまなアプローチを学習します。

MongoDB の識別集約

MongoDB の個別の集計を学習するには、データが入力されたコレクションが必要です。そのために、使用できるサンプルデータを使用して collection という名前のコレクションを作成しました。

サンプルコード:

// MongoDB version 5.0.8

//insert documents
> db.collection.insertMany([
    { "_id": 1, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 2, "state": "punjab", "city": "lahore", "zipcode" : 94608 },
    { "_id": 3, "state": "punjab", "city": "lahore", "zipcode" : 99559 },
    { "_id": 4, "state": "punjab", "city": "lahore", "zipcode" : 99559 },

    { "_id": 5, "state": "punjab", "city": "karachi", "zipcode" : 99523 },
    { "_id": 6, "state": "punjab", "city": "karachi", "zipcode" : 94608 },
    { "_id": 7, "state": "punjab", "city": "karachi", "zipcode" : 99559 },
    { "_id": 8, "state": "punjab", "city": "karachi", "zipcode" : 99545 },

    { "_id": 9, "state": "punjab", "city": "multan", "zipcode" : 99545 },
    { "_id": 10, "state": "punjab", "city": "multan", "zipcode" : 94608 },
    { "_id": 11, "state": "punjab", "city": "multan", "zipcode" : 99559 },
    { "_id": 12, "state": "punjab", "city": "multan", "zipcode" : 99559 }
]);

次のコマンドを実行して、挿入されたデータを確認することもできます。

// MongoDB version 5.0.8

//display documents
> db.collection.find();

MongoDB で distinct() メソッドを使用して個別の値を検索する

コード例 1:

// MongoDB version 5.0.8

// return the distinct values for the `zipcode` field across the collection
> db.collection.distinct( "zipcode");

出力:

[ 94608, 99523, 99545, 99559 ]

コード例 2:

// MongoDB version 5.0.8

// returns unique `city` names where the `zipcode` is either 99559 or 99545 or both.
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} );

出力:

[ "karachi", "lahore", "multan" ]

コード例 3:

// MongoDB version 5.0.8

// use the `.length` property to obtain the size/length of the retrieved unique values
> db.collection.distinct( "city", {"zipcode": { $in: [99559,99545]}} ).length;

出力:

3

distinct() メソッドは、1つのコレクションまたはビュー全体で指定されたフィールドの個別の値を抽出し、出力を配列で返します。

少なくとも 1つのパラメーターを取り、最大 3つになります。ここで、1 番目、2 番目、および 3 番目のパラメーターは、それぞれ fieldquery、および options です。

field パラメータは、一意の(個別の)値を返す必要がある field 名です。query は、個別の値を取得する必要があるドキュメントに通知します。

options パラメータはオプションですが、options を指定するドキュメントです。この方法を使用する場合は、次の点に注意する必要があります。

  1. db.collection.distinct() は、次のセクションで説明する distinct コマンドのラッパーを提供します。
  2. 指定されたフィールドの値が配列の場合、db.collection.distinct() は配列のすべての要素を個別の値と見なします。たとえば、フィールドにその値が [2, [2], 2] として含まれている場合、db.collection.distinct()2[2]、および 2 を次のように取ります。個別の値。

MongoDB で distinct コマンドを使用して個別の値を検索する

サンプルコード:

// MongoDB version 5.0.8

// find distinct values
> db.runCommand ( { distinct: "collection", key: "zipcode" } );

出力:

{ "values" : [ 94608, 99523, 99545, 99559 ], "ok" : 1 }

このコードでは、distinct 集計コマンドを使用して、1つのコレクション全体で指定されたフィールドのすべての個別の値を検索しました。その結果、個別の値の配列を持つ 1つのドキュメントが返されます。

また、クエリプランとクエリ統計が埋め込まれたドキュメントもあります。

MongoDB で $group 集計演算子を使用して個別の値を検索する

サンプルコード:

// MongoDB version 5.0.8

// find size of distinct values for each `city`
> db.collection.aggregate([
    {
        $group:{
            "_id": "$city",
            "unique_count": {
                $addToSet: "$zipcode"
             }
        }
    },
    {
        $project:{
            "distinct_zipcodes":{
                $size: "$unique_count"
             }
        }
    }
]);

出力:

{ "_id" : "karachi", "distinct_zipcodes" : 4 }
{ "_id" : "lahore", "distinct_zipcodes" : 2 }
{ "_id" : "multan", "distinct_zipcodes" : 3 }

このコード例は、すべての cityzipcode フィールドの個別の値を返します。次の点を読んで、コードで何が起こっているかを理解してください。

  1. $addToSet は、値がすでに存在するまで配列に値を追加し続けます。 $addToSet 集計は、unique_count 変数に保存したすべての一意の値を含む配列を返します。
  2. city 名を _id とし、$group 集計演算子を使用して、_idunique_count を使用してそれらをグループ化します。
  3. 次に、$project を使用して、フィールドの包含/抑制を指定し、新しいフィールドを追加し、既存のフィールドの値をリセットします。ここでは、$size を使用して、$unique_count という名前の配列のサイズを見つけ、それを distinct_zipcodes 変数に保存します。この変数は、画面の _id フィールドの横にさらに表示されます(上記の出力を参照)。。
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook