MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBで特定のフィールドのすべての値を一覧表示する方法【distinct()活用ガイド】

MongoDBで特定フィールドの全値を一覧表示するには?

MongoDBで特定のフィールドに含まれるすべての値の一覧を取得したい場合は、distinct()メソッドを使うのが最もシンプルで効率的な方法です。このメソッドは、指定したフィールドの値から重複を取り除き、一意な値のみを配列として返します。

distinct()の基本構文

db.yourCollectionName.distinct( "yourFieldName");

コレクション名とフィールド名を指定するだけで利用できます。特に配列型のフィールドに対して実行すると、各ドキュメント内の配列要素が自動的に展開(フラット化)され、コレクション全体からユニークな値だけが抽出される点が大きな特徴です。

サンプルコレクションの作成

実際の動作を確認するために、サンプルデータを持つコレクションを作成しましょう。以下のクエリでドキュメントを1件ずつ挿入していきます。

> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[10,20,30]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fc89ed3c9d04998abf011")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[40,50,60]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fc8abd3c9d04998abf012")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[10,20,30]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fc8d7d3c9d04998abf013")
}
> db.listAllValuesOfCeratinFieldsDemo.insertOne({"ListOfValues":[40,50,70]});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c8fc8e2d3c9d04998abf014")
}

ここでは「ListOfValues」という配列フィールドを持つ4つのドキュメントを登録しました。同じ値の組み合わせ([10,20,30])が含まれている点に注目してください。

登録したドキュメントの確認

find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。

> db.listAllValuesOfCeratinFieldsDemo.find().pretty();

実行結果は以下のとおりです。

{
    "_id" : ObjectId("5c8fc89ed3c9d04998abf011"),
    "ListOfValues" : [
        10,
        20,
        30
    ]
}
{
    "_id" : ObjectId("5c8fc8abd3c9d04998abf012"),
    "ListOfValues" : [
        40,
        50,
        60
    ]
}
{
    "_id" : ObjectId("5c8fc8d7d3c9d04998abf013"),
    "ListOfValues" : [
        10,
        20,
        30
    ]
}
{
    "_id" : ObjectId("5c8fc8e2d3c9d04998abf014"),
    "ListOfValues" : [
        40,
        50,
        70
    ]
}

特定フィールドの全値を取得するクエリ

それでは、「ListOfValues」フィールドに格納されているすべての値を一覧表示してみましょう。実行するクエリは次の1行だけです。

> db.listAllValuesOfCeratinFieldsDemo.distinct( "ListOfValues");

実行結果:

[ 10, 20, 30, 40, 50, 60, 70 ]

ご覧のとおり、4つのドキュメントに分散していた配列要素が展開され、重複分(2回目の[10,20,30]や重複する40・50など)が取り除かれた状態で、一意な値のみが返されました。

応用:条件を指定してdistinct()を使う

distinct()は第2引数にクエリ条件を渡すことも可能です。特定の条件に一致するドキュメントだけを対象にしたい場合は、以下のように記述します。

db.collectionName.distinct( "fieldName", { 条件 });

さらに複雑な集計処理が必要なケースでは、アグリゲーションフレームワークの $unwind$group を組み合わせる方法も検討するとよいでしょう。ただし、単純に一意な値の一覧が欲しいだけであれば、distinct()が最も手軽でパフォーマンスにも優れた選択肢となります。

  1. MongoDBで特定の文字列を使ってフィールドのすべての値を一括更新する方法

    MongoDBでフィールドのすべての値を一括更新する方法MongoDBのコレクション内に存在するすべてのドキュメントの特定フィールドを、同じ文字列でまとめて更新したい場合があります。そのようなときは、update()メソッドにオプション「multi: true」を指定します。この記事では、実際のコマンド例をもとに、手順をわかりやすく解説します。1. サンプルコレクションの作成まずはinsertOne()メソッドを使って、テスト用コレクション「demo720」に複数のドキュメントを挿入します。> db.demo720.insertOne({SubjectName:MySQL}); {

  2. MySQLでフィールド(カラム)の全値を0に一括更新する方法

    UPDATE文を使ってカラムの値をまとめて0にするMySQLであるカラム(フィールド)に格納されているすべての値を0に変更したい場合は、UPDATE文を使用します。WHERE句を付けずに実行することで、テーブル内の全行が対象になります。UPDATE テーブル名 SET カラム名 = 0;以下、実際の手順をサンプルとともに見ていきましょう。1. テーブルを作成するまずはテスト用のテーブルを作成します。mysql> create table DemoTable    (    Number int &n