MongoDBでドキュメント内のオブジェクト配列から特定のオブジェクトを取得する方法
MongoDBでは、オブジェクトの配列から特定のオブジェクトを取得したい場合、位置演算子($)を使用します。位置演算子は、クエリ条件に一致した配列要素だけを返すための強力な機能です。
この記事では、実際にコレクションを作成し、位置演算子を使って特定のオブジェクトを取り出す手順を解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使ってドキュメントを含むコレクションを作成します。
> db.getASpecificObjectDemo.insertOne(
... {
... _id : 1,
... "CustomerName" : "Larry",
... "CustomerDetails" : {
... "CustomerPurchaseDescription": [{
... id : 100,
... "ProductName" : "Product-1",
... "Amount": 10000
... },{
... id : 101,
... "ProductName" : "Product-2",
... "Amount": 10500
... },
... {
... id : 102,
... "ProductName" : "Product-3",
... "Amount": 10200
... }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 1 }上記の例では、顧客「Larry」の購入履歴として、3つの商品情報(Product-1〜Product-3)が配列に格納されています。
2. 登録されたドキュメントの確認
find()メソッドとpretty()を組み合わせることで、コレクション内のすべてのドキュメントを見やすい形式で表示できます。
> db.getASpecificObjectDemo.find().pretty();
実行すると、以下のような出力が得られます。
{
"_id" : 1,
"CustomerName" : "Larry",
"CustomerDetails" : {
"CustomerPurchaseDescription" : [
{
"id" : 100,
"ProductName" : "Product-1",
"Amount" : 10000
},
{
"id" : 101,
"ProductName" : "Product-2",
"Amount" : 10500
},
{
"id" : 102,
"ProductName" : "Product-3",
"Amount" : 10200
}
]
}
}3. 位置演算子($)を使って特定のオブジェクトを取得する
ここからが本題です。特定のMongoDBドキュメント内のオブジェクト配列から、条件に一致する1つのオブジェクトだけを取得するには、次のようにクエリを記述します。
> db.getASpecificObjectDemo.find({_id:1, "CustomerDetails.CustomerPurchaseDescription.id":101},{_id:0, "CustomerDetails.CustomerPurchaseDescription.$":1});このクエリのポイントは以下の通りです。
- 第1引数(検索条件):_idが「1」であり、かつ配列内のidが「101」である要素を対象にします。
- 第2引数(射影):_id:0で_idフィールドを非表示にし、「$」を指定することで、条件に一致した配列要素のみを返します。
実行結果は以下のようになります。
{ "CustomerDetails" : { "CustomerPurchaseDescription" : [ { "id" : 101, "ProductName" : "Product-2", "Amount" : 10500 } ] } }まとめ
このように、位置演算子($)を活用すれば、配列全体ではなく条件に一致した特定のオブジェクトだけを効率的に取得できます。大量のデータが配列に格納されている場合でも、必要な要素だけを絞り込んで取得できるため、アプリケーションのパフォーマンス向上にも役立ちます。
-
MongoDBのAggregateでドキュメントと配列要素の平均値を取得する方法
MongoDBでドキュメントのフィールドおよび配列内の各要素の平均値を求めるには、aggregate()メソッドと$groupステージを組み合わせ、平均を計算する$avg演算子を使用します。ここでは、実際にサンプルコレクションを作成しながら、具体的な手順を解説します。 サンプルコレクションの作成 まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成します。 > db.demo598.insertOne( ... { ... Information:Student, ... &
-
MongoDBで特定フィールドの配列要素数を取得する方法($size演算子の使い方)
MongoDBでドキュメント内の特定フィールド(配列)に含まれる要素の数をカウントしたい場合は、集計パイプライン(aggregate)と$size演算子を組み合わせるのが最も簡単な方法です。この記事では、実際のコレクションを作成しながら、配列要素数を取得する具体的な手順を解説します。1. サンプルコレクションの作成まず、配列型のフィールド「Subject」を持つドキュメントを含むコレクションを作成します。> db.demo723.insertOne({Subject:[MySQL,MongoDB]}); { acknowledged : true, insertedId