MongoDB ディスティンクトアグリゲーション
- MongoDB の識別集約
-
MongoDB で
distinct()
メソッドを使用して個別の値を検索する -
MongoDB で
distinct
コマンドを使用して個別の値を検索する -
MongoDB で
$group
集計演算子を使用して個別の値を検索する
この記事では、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 番目のパラメーターは、それぞれ field
、query
、および options
です。
field
パラメータは、一意の(個別の)値を返す必要がある field
名です。query
は、個別の値を取得する必要があるドキュメントに通知します。
options
パラメータはオプションですが、options
を指定するドキュメントです。この方法を使用する場合は、次の点に注意する必要があります。
db.collection.distinct()
は、次のセクションで説明するdistinct
コマンドのラッパーを提供します。- 指定されたフィールドの値が配列の場合、
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 }
このコード例は、すべての city
の zipcode
フィールドの個別の値を返します。次の点を読んで、コードで何が起こっているかを理解してください。
$addToSet
は、値がすでに存在するまで配列に値を追加し続けます。$addToSet
集計は、unique_count
変数に保存したすべての一意の値を含む配列を返します。city
名を_id
とし、$group
集計演算子を使用して、_id
とunique_count
を使用してそれらをグループ化します。- 次に、
$project
を使用して、フィールドの包含/抑制を指定し、新しいフィールドを追加し、既存のフィールドの値をリセットします。ここでは、$size
を使用して、$unique_count
という名前の配列のサイズを見つけ、それをdistinct_zipcodes
変数に保存します。この変数は、画面の_id
フィールドの横にさらに表示されます(上記の出力を参照)。。