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

MongoDBでネストされた配列から特定の要素を抽出する方法

MongoDBでネストされた配列から特定の要素を抽出する

MongoDBでネストされた(入れ子になった)配列の中から特定の要素を抽出したい場合は、$elemMatch 演算子を使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。

> db.particularElementDemo.insertOne(
    {
        "GroupId" :"Group-1",
        "UserDetails" : [
            {
                "UserName" : "John",
                "UserOtherDetails" : [
                    {
                        "UserEmailId" : "John123@gmail.com",
                        "UserFriendName" : [
                            {
                                "Name" : "Chris"
                            }
                        ]
                    },
                    {
                        "UserEmailId" : "John22@hotmail.com",
                        "UserFriendName" : [
                            {
                                "Name" : "Robert"
                            }
                        ]
                    }
                ]
            }
        ]
    }
);
{ "acknowledged" : true, "insertedId" : 100 }

作成したコレクションの内容を確認するために、find() メソッドですべてのドキュメントを表示します。

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

上記のコマンドを実行すると、以下のような出力が得られます。

{
    "_id" : 100,
    "GroupId" : "Group-1",
    "UserDetails" : [
        {
            "UserName" : "John",
            "UserOtherDetails" : [
                {
                    "UserEmailId" : "John123@gmail.com",
                    "UserFriendName" : [
                        {
                             "Name" : "Chris"
                        }
                    ]
                },
                {
                    "UserEmailId" : "John22@hotmail.com",
                    "UserFriendName" : [
                        {
                             "Name" : "Robert"
                        }
                    ]
                }
            ]
        }
    ]
}

ネストされた配列から特定の要素を抽出するクエリ

それでは、ネストされた配列内の特定の要素を抽出するためのクエリを見ていきましょう。ここでは、「UserFriendName」の中に「Name」が「Robert」である要素を持つドキュメントを検索し、該当するフィールドのみを取得しています。

> db.particularElementDemo.find(
    {
        'UserDetails':{
            $elemMatch:{
                'UserOtherDetails':{
                    $elemMatch:{
                        'UserFriendName':{ $elemMatch: {"Name" : "Robert" } }
                    }
                }
            }
        }
    },{"UserDetails.UserOtherDetails.UserFriendName.Name":1}
);

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

{ "_id" : 100, "UserDetails" : [ { "UserOtherDetails" : [ { "UserFriendName" : [ { "Name" : "Chris" } ] }, { "UserFriendName" : [ { "Name" : "Robert" } ] } ] } ] }

$elemMatch 演算子のポイント

$elemMatch は、配列内の少なくとも1つの要素が指定した条件に一致するかどうかを判定する演算子です。今回のように配列が多層にネストしている場合は、各階層ごとに $elemMatch を段階的に適用することで、深い階層にある要素にも正確にアクセスできます。また、第2引数のプロジェクションで取得したいフィールドを指定すれば、必要なデータだけを効率的に取り出すことが可能です。

  1. MongoDBでネストされた配列をソートする方法:$unwindと$sortを活用したクエリ

    MongoDBでドキュメント内に格納されたネストされた配列(サブドキュメントの配列)をソートしたい場合、集計パイプライン(aggregate)を使い、$unwindで配列を展開した後に$sortで並べ替え、最後に$groupで再構成するのが定番のアプローチです。この記事では、実際にコレクションを作成しながら、ネストされた配列をスコア順にソートする手順を解説します。1. サンプルコレクションの作成まず、ネストされた配列「details」を持つドキュメントを挿入してコレクションを作成します。> db.demo505.insertOne( ... { ... details: [ ..

  2. MongoDBで配列の要素を削除するには?$pull演算子の使い方を解説

    MongoDBで配列から要素を削除する基本MongoDBで配列内の要素を削除したい場合は、$pull演算子を使用します。$pullは、既存の配列から指定した値、または条件に一致するすべてのインスタンスを取り除くための更新演算子です。この記事では、実際にコレクションを作成し、ネストされた配列から特定の要素を削除する手順を順番に解説します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。ここでは「software」フィールドの中に「services」という配列を持つドキュメントを挿入します。db.demo541.insertOne({software:{servic