MongoDBコレクションの配列値にアクセスして特定のドキュメントを取得する方法
配列値へのアクセスにはドット(.)表記を使用する
MongoDBで配列内の値にアクセスするには、ドット(.)表記を使用します。フィールド名とネストされたフィールド名を「.」でつなぐことで、ドキュメント内の配列要素やサブドキュメントのフィールドを指定できます。
ここでは、実際にコレクションを作成しながら、配列値へのアクセス方法と特定ドキュメントの取得方法を解説します。
サンプルコレクションの作成
まず、商品情報を配列として持つドキュメントを挿入し、コレクション「demo326」を作成します。
> db.demo326.insertOne({id:101,"ProductDetails":[{"ProductId":"Prod-101","ProductName":"Product-1"},
... {"ProductId":"Prod-102","ProductName":"Product-2"}
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e516751f8647eb59e562074")
}
> db.demo326.insertOne({id:103,"ProductDetails":[{"ProductId":"Prod-104","ProductName":"Product-5"},
... {"ProductId":"Prod-105","ProductName":"Product-6"}
... ]
... }
... );
{
"acknowledged" : true,
"insertedId" : ObjectId("5e516771f8647eb59e562075")
}上記のクエリでは、「ProductDetails」という配列フィールドの中に、複数の商品情報(ProductId と ProductName)を持つドキュメントを格納しています。
find()メソッドですべてのドキュメントを表示する
作成したコレクション内のすべてのドキュメントを確認するには、find()メソッドを使用します。
> db.demo326.find();
このクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e516751f8647eb59e562074"), "id" : 101, "ProductDetails" : [
{ "ProductId" : "Prod-101", "ProductName" : "Product-1" },
{ "ProductId" : "Prod-102", "ProductName" : "Product-2" }
]
}
{
"_id" : ObjectId("5e516771f8647eb59e562075"), "id" : 103, "ProductDetails" : [
{ "ProductId" : "Prod-104", "ProductName" : "Product-5" },
{ "ProductId" : "Prod-105", "ProductName" : "Product-6" }
]
}配列内の特定のドキュメントをフェッチするクエリ
MongoDBコレクション内の配列にアクセスし、特定のドキュメントを取得するには、ドット表記を使って「配列フィールド名.サブフィールド名」の形式で条件を指定します。
> db.demo326.find({"ProductDetails.ProductId":"Prod-104"});このクエリを実行すると、次の出力が得られます。
{
"_id" : ObjectId("5e516771f8647eb59e562075"), "id" : 103, "ProductDetails" : [
{ "ProductId" : "Prod-104", "ProductName" : "Product-5" },
{ "ProductId" : "Prod-105", "ProductName" : "Product-6" }
]
}ポイント解説
このクエリでは、"ProductDetails.ProductId":"Prod-104" という条件を指定しています。MongoDBは配列内のいずれかの要素が条件に一致すれば、その配列を含むドキュメント全体を返します。つまり、配列内の一部だけではなく、一致したドキュメント全体が出力される点に注意してください。
もし配列から一致した要素だけを取り出したい場合は、集計パイプラインの $filter や $elemMatch、プロジェクションを組み合わせることで実現できます。用途に応じて使い分けるとよいでしょう。
-
MongoDBドキュメントから特定の値をフィルタリングする方法
MongoDBドキュメントから特定の値をフィルタリングする方法MongoDBでドキュメント内の配列から特定の値を抽出したい場合は、集計パイプラインで $filter を使用します。この記事では、実際にコレクションを作成し、特定の条件に一致する要素だけをフィルタリングする手順を、サンプルコードとともに解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを含むドキュメントを持つコレクションを作成します。 db.demo751.insertOne( ... { ... _id: 101, ... details: [
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "