MongoDBで一意の値のみ(重複なし)を取得する方法【distinct()の使い方】
MongoDBで特定フィールドの重複を除外し、一意の値だけを取得したい場合は、distinct()メソッドを使用します。基本の構文は以下のとおりです。
db.yourCollectionName.distinct("yourFieldName");サンプルコレクションの作成
実際の動作を理解するために、まずはサンプル用のコレクションを作成しましょう。以下のクエリを実行して、ドキュメントを順番に挿入していきます。
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"Larry","CustomerAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed7262f684a30fbdfd580")
}
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"Mike","CustomerAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed72d2f684a30fbdfd581")
}
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"Sam","CustomerAge":21});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed7322f684a30fbdfd582")
}
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"Carol","CustomerAge":25});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed73a2f684a30fbdfd583")
}
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"David","CustomerAge":22});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed74a2f684a30fbdfd584")
}
> db.returnOnlyUniqueValuesDemo.insertOne({"CustomerName":"Chris","CustomerAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8ed7582f684a30fbdfd585")
}登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。クエリは以下のとおりです。
> db.returnOnlyUniqueValuesDemo.find().pretty();
実行結果は次のとおりです。
{
"_id" : ObjectId("5c8ed7262f684a30fbdfd580"),
"CustomerName" : "Larry",
"CustomerAge" : 23
}
{
"_id" : ObjectId("5c8ed72d2f684a30fbdfd581"),
"CustomerName" : "Mike",
"CustomerAge" : 21
}
{
"_id" : ObjectId("5c8ed7322f684a30fbdfd582"),
"CustomerName" : "Sam",
"CustomerAge" : 21
}
{
"_id" : ObjectId("5c8ed73a2f684a30fbdfd583"),
"CustomerName" : "Carol",
"CustomerAge" : 25
}
{
"_id" : ObjectId("5c8ed74a2f684a30fbdfd584"),
"CustomerName" : "David",
"CustomerAge" : 22
}
{
"_id" : ObjectId("5c8ed7582f684a30fbdfd585"),
"CustomerName" : "Chris",
"CustomerAge" : 23
}distinct()で一意の値のみを取得する
それでは、本題である重複のない一意の値のみを返すクエリを見てみましょう。
> db.returnOnlyUniqueValuesDemo.distinct("CustomerAge");実行結果:
[ 23, 21, 25, 22 ]
このように、「CustomerAge」フィールドには「23」と「21」がそれぞれ複数存在していますが、distinct()を使うことで重複が自動的に取り除かれ、一意の値だけが配列として返されます。
補足:条件を指定してdistinct()を実行する
distinct()の第2引数にクエリ条件を渡せば、特定の条件に一致するドキュメントだけを対象に一意の値を取得することも可能です。
db.yourCollectionName.distinct("yourFieldName", { yourCondition });シンプルな構文ながら柔軟に使えるため、データの集計や分析の際にぜひ活用してみてください。
-
MySQLで重複する列の値を1回だけ返す方法(DISTINCT句の使い方)
MySQLで重複する値を1回だけ取得するには?MySQLでテーブル内の重複する列の値を1回だけ返したい場合は、DISTINCT句を使用します。本記事では、実際にサンプルテーブルを作成し、DISTINCT句の基本的な使い方を順を追って解説します。サンプルテーブルの作成まず、例として以下のようなテーブルを作成します。mysql> create table DemoTable680(Status varchar(100));Query OK, 0 rows affected (0.75 sec)レコードの挿入次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは意図的に「B
-
Pythonの関数から複数の値を返す4つの方法【タプル・リスト・辞書・クラス】
はじめに Pythonでは、関数から複数の値をまとめて返すことが標準機能として簡単に行えます。具体的には、タプル、リスト、辞書(dict)、そしてユーザー定義クラスのオブジェクトという4つの形式が利用できます。 それぞれの方法を、実際のコード例とともに順番に見ていきましょう。 方法1:タプルとして返す(最も一般的) Pythonで最もよく使われるのがこの方法です。return a, bのようにカンマで区切って値を並べると、自動的にタプルとしてまとめて返されます。受け取る側ではアンパックを使って、個別の変数へ直接代入することも可能です。 >>> def function():