MongoDBで配列内の一意(ユニーク)な要素を取得するには?distinct()メソッドの使い方
MongoDBで配列から一意(ユニーク)な要素を取得する方法
配列フィールドに含まれる重複した値を取り除き、一意な要素だけを抽出したい場合には、distinct()メソッドを使用します。この記事では、実際のコード例を通じて、その具体的な使い方をわかりやすく解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、国名の配列を持つドキュメントをコレクションに挿入しましょう。
> db.demo588.insertOne({"CountryName":["US","AUS","UK","US","UK","AUS"]});
{
"acknowledged" : true, "insertedId" : ObjectId("5e92bbd2fd2d90c177b5bccb")
}
挿入が成功すると、「acknowledged : true」というレスポンスが返され、ドキュメントが正常に登録されたことを確認できます。
2. ドキュメントの内容を確認する
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.demo588.find().pretty();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e92bbd2fd2d90c177b5bccb"),
"CountryName" : [
"US",
"AUS",
"UK",
"US",
"UK",
"AUS"
]
}
ご覧のとおり、「CountryName」フィールドには「US」「UK」「AUS」がそれぞれ重複して格納されています。
3. distinct()で一意な要素を抽出する
それでは、配列から重複を排除した一意な要素を取得するクエリを実行してみましょう。
> db.demo588.distinct("CountryName");
実行結果は以下のとおりです。
[ "AUS", "UK", "US" ]
まとめ
distinct()メソッドを使えば、指定したフィールド(配列フィールドを含む)から重複のない値を簡単に抽出できます。また、結果は自動的に昇順でソートされて返される点も便利です。大量のデータからユニークなカテゴリ名やタグ一覧を取得したい場合などに、ぜひ活用してみてください。
-
MongoDBでサブドキュメントの配列をクエリする方法
MongoDBでサブドキュメントの配列をクエリするには、集計パイプラインの$unwindを使用します。$unwindは、配列フィールドを展開し、配列の各要素ごとに個別のドキュメントを生成するステージです。これにより、配列内のサブドキュメントを個別にフィルタリングできるようになります。ここでは、大学の情報を含むコレクションを作成し、その中から特定の条件に一致するサブドキュメントを抽出する手順を解説します。コレクションの作成まず、insertOne()メソッドを使って、サブドキュメントの配列を含むドキュメントを挿入しましょう。> db.demo499.insertOne({... "
-
MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ
MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..