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

MongoDBで配列の最初の要素に一致するドキュメントを検索する方法

MongoDBで配列の最初の要素を条件にドキュメントを検索する

MongoDBでは、配列内の特定の位置(インデックス)を指定することで、その位置にある要素だけを対象にドキュメントを検索できます。本記事では、配列の最初の要素に一致するドキュメントを取得する方法を、具体的なコード例とともに解説します。

1. テスト用コレクションの作成

まず、ドキュメントを格納するコレクションを作成しましょう。ここでは、クライアント情報を配列として持つ「matchingFirstItemInTheArrayDemo」というコレクションを作成します。

> db.matchingFirstItemInTheArrayDemo.insertOne(
    {
        "ClientDetails": [
            {
                "ClientName": "Larry",
                "ClientAge":28
            }
        ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd7a5d26d78f205348bc636")
}
> db.matchingFirstItemInTheArrayDemo.insertOne(
{
    "ClientDetails": [
        {
           "ClientName": "Chris",
           "ClientAge":56,
        }
   ]
}
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd7a5f56d78f205348bc637")
}
> db.matchingFirstItemInTheArrayDemo.insertOne(
    {
        "ClientDetails": [
            {
                "ClientName": "Robert",
                "ClientAge":46,
            }
        ]
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd7a6076d78f205348bc638")
}

これで、Larry・Chris・Robertという3人のクライアント情報を持つドキュメントが登録されました。

2. 登録されたドキュメントの確認

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。見やすく整形するためにpretty()も併用しています。

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

上記のクエリを実行すると、以下のような出力が得られます。

{
    "_id" : ObjectId("5cd7a5d26d78f205348bc636"),
    "ClientDetails" : [
        {
           "ClientName" : "Larry",
           "ClientAge" : 28
        }
   ]
}
{
    "_id" : ObjectId("5cd7a5f56d78f205348bc637"),
    "ClientDetails" : [
        {
           "ClientName" : "Chris",
           "ClientAge" : 56
        }
   ]
}
{
    "_id" : ObjectId("5cd7a6076d78f205348bc638"),
    "ClientDetails" : [
        {
           "ClientName" : "Robert",
           "ClientAge" : 46
        }
   ]
}

3. 配列の最初の要素に一致するドキュメントを検索する

配列の最初の要素を条件に検索するには、フィールドパスにインデックス番号「0」を指定します。書式は「配列名.0.フィールド名」のようになります。

> db.matchingFirstItemInTheArrayDemo.find({"ClientDetails.0.ClientName":"Chris"});

実行結果は以下の通りです。ClientNameが「Chris」であるドキュメントのみが取得できています。

{ "_id" : ObjectId("5cd7a5f56d78f205348bc637"), "ClientDetails" : [ { "ClientName" : "Chris", "ClientAge" : 56 } ] }

ポイント:インデックス指定の重要性

「ClientDetails.0.ClientName」のように.0を付けることで、配列の先頭要素のみが検索対象になります。もし「ClientDetails.ClientName」のようにインデックスを省略した場合、配列内のどの位置にある要素でも一致すればヒットしてしまうため、意図しないドキュメントが取得される可能性があります。配列の特定の位置を厳密に条件としたい場合は、必ずインデックス番号を明示的に指定しましょう。

  1. 【MongoDB】配列内の値を指定して一致するドキュメントを検索するクエリ

    $in演算子とは配列フィールドに複数の候補値のいずれかが含まれるドキュメントを検索したい場合、MongoDBでは$in演算子を使用します。まずは、サンプルとなるドキュメントを挿入してコレクションを作成してみましょう。> db.demo511.insertOne({ListOfProject:[Library Management System,Hospital Management System]}); { acknowledged : true, insertedId : ObjectId(5e88473a987b6e0e9d18f585) } > db.demo51

  2. MongoDBでオブジェクト配列内の特定のネストされたドキュメントをクエリする方法

    MongoDBでオブジェクトの配列からネストされたドキュメントを抽出する オブジェクトの配列に格納されたネストされたドキュメントを条件付きで検索したい場合、find()メソッドに$elemMatch演算子を組み合わせることで、指定した条件に一致する要素だけを取り出すことができます。 ここでは、「StudentAge」フィールドを持つ学生情報だけを配列から抽出する例を見ていきましょう。 1. サンプルコレクションの作成 まず、ドキュメントを挿入してコレクションを作成します。このコレクションには、学生情報がオブジェクトの配列として格納されています。 > db.demo763.insertO