MongoDBでドキュメントから重複しないFirstNameの値を取得するクエリ(distinctメソッドの使い方)
MongoDBでは、コレクション内の特定フィールドから重複を除外した一意な値を取得したい場合があります。そんなときに便利なのが distinct() メソッドです。この記事では、実際にサンプルコレクションを作成し、distinct() を使って「FirstName」フィールドの一意な値を取得する手順を解説します。
1. サンプルコレクションの作成
まずは、テスト用のコレクションにドキュメントを挿入していきましょう。
> db.demo303.insertOne({FirstName:"Chris",LastName:"Brown"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea0f6f8647eb59e56202f")
}
> db.demo303.insertOne({FirstName:"John",LastName:"Doe"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea104f8647eb59e562030")
}
> db.demo303.insertOne({FirstName:"Chris",LastName:"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea10df8647eb59e562031")
}
> db.demo303.insertOne({FirstName:"John",LastName:"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea121f8647eb59e562032")
}
> db.demo303.insertOne({FirstName:"David",LastName:"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4ea136f8647eb59e562033")
}
上記の例では、「Chris」と「John」がそれぞれ2件ずつ存在しており、重複データが含まれていることがわかります。
2. 挿入したドキュメントの確認
find() メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo303.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : ObjectId("5e4ea0f6f8647eb59e56202f"),
"FirstName" : "Chris",
"LastName" : "Brown"
}
{
"_id" : ObjectId("5e4ea104f8647eb59e562030"),
"FirstName" : "John",
"LastName" : "Doe"
}
{
"_id" : ObjectId("5e4ea10df8647eb59e562031"),
"FirstName" : "Chris",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5e4ea121f8647eb59e562032"),
"FirstName" : "John",
"LastName" : "Smith"
}
{
"_id" : ObjectId("5e4ea136f8647eb59e562033"),
"FirstName" : "David",
"LastName" : "Miller"
}
3. distinct()で重複しないFirstNameの値を取得する
それでは本題です。「FirstName」フィールドの一意な値を取得するには、以下のように distinct() を呼び出します。
> db.demo303.distinct("FirstName");
実行結果は次のとおりです。
[ "Chris", "John", "David" ]
5件のドキュメントから重複が取り除かれ、3つの一意な値だけが配列として返されていることが確認できます。
distinct()メソッドのポイント
- 基本構文:
db.コレクション名.distinct("フィールド名")の形式で呼び出します。 - 条件指定も可能: 第2引数にクエリ条件を渡すことで、特定の条件に一致するドキュメントだけを対象に一意な値を取得できます(例:
db.demo303.distinct("FirstName", {LastName:"Smith"}))。 - 戻り値: 結果は常に配列(Array)として返されます。
- ユースケース: カテゴリー一覧やタグ一覧など、選択肢として使える値のリストを取得したい場合に非常に便利です。
このように、distinct() メソッドを使えば、たった1行のクエリで重複のない値のリストを簡単に取得できます。データ分析やフォームの選択肢生成など、さまざまな場面で活用してみてください。
-
MongoDBですべてのドキュメントにわたる個別(ユニーク)な値をカウントする方法
MongoDBでコレクション内のすべてのドキュメントにわたって、重複を除いた個別(ユニーク)な値の数をカウントしたい場合は、aggregate()メソッドを使用します。この記事では、実際のコード例とともに、その手順をわかりやすく解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使って、デモ用のコレクション「demo718」にドキュメントを挿入します。 > db.demo718.insertOne( ... { ... id:101, ... details: ... { ... Oth
-
MongoDBでグループごとの最大値を取得する方法($sortと$groupの活用)
MongoDBで、重複している個別の要素(グループ)ごとに最大値を取得したい場合、aggregate()メソッドと$sort・$groupステージを組み合わせることで実現できます。この記事では、実際のコード例を通じて、その手順をわかりやすく解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成します。ここではdemo750というコレクションに、idとvalueフィールドを持つドキュメントを挿入します。> db.demo750.insertOne({id:101,value:50}); { acknowledged : true, inserted