MongoDBで特定のキーを指定して配列内のオブジェクトを更新する方法
MongoDBでは、位置演算子「$」とupdate()メソッドを組み合わせることで、配列内の特定の条件に一致するオブジェクトだけを効率的に更新できます。この記事では、商品情報の配列を持つドキュメントを例に、その具体的な手順を解説します。
1. コレクションとドキュメントの作成
まず、insertOne()メソッドを使って、配列フィールド「ProductInformation」を含むドキュメントを作成します。
> db.demo419.insertOne({"ProductInformation":[{"ProductName":"Product-1","ProductPrice":500},{"ProductName":"Product-2","ProductPrice":600}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e724762b912067e57771ae8")
}
2. ドキュメントの表示
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo419.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e724762b912067e57771ae8"), "ProductInformation" : [ { "ProductName" : "Product-1", "ProductPrice" : 500 }, { "ProductName" : "Product-2", "ProductPrice" : 600 } ] }
現時点では、「Product-1」の価格は500になっています。
3. 特定のキーに一致する配列内オブジェクトを更新する
次のクエリでは、条件として「ProductNameがProduct-1」を指定し、位置演算子「$」を使って一致した配列要素の「ProductPrice」だけを更新しています。
> db.demo419.update({'ProductInformation.ProductName' : "Product-1" }, { $set : { 'ProductInformation.$.ProductPrice' : 1250}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }
「nModified : 1」と表示されていることから、1件のドキュメントが正常に更新されたことがわかります。
4. 更新結果の確認
もう一度find()メソッドを実行して、更新が正しく反映されているか確認しましょう。
> db.demo419.find();
実行結果は以下の通りです。
{ "_id" : ObjectId("5e724762b912067e57771ae8"), "ProductInformation" : [ { "ProductName" : "Product-1", "ProductPrice" : 1250 }, { "ProductName" : "Product-2", "ProductPrice" : 600 } ] }
「Product-1」のProductPriceが500から1250に更新され、「Product-2」は影響を受けていないことが確認できます。
ポイントまとめ
「ProductInformation.$.ProductPrice」という記述により、検索条件に一致した配列要素だけが対象となります。配列全体を置き換えることなく、目的のオブジェクトの特定のフィールドのみを変更できるのが、この方法の大きな利点です。なお、新しいバージョンのMongoDBでは、updateOne()やupdateMany()の使用が推奨されています。
-
MongoDBで配列オブジェクト内の配列要素の値をインクリメントする方法
MongoDBでは、配列オブジェクト内の特定の要素の値を増加させたい場合、$inc 演算子を使用します。本記事では、実際にコレクションを作成し、配列内の「Quantity」フィールドの値をインクリメントする手順を順番に解説します。 1. サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成します。以下の例では、「details」という配列フィールドの中に、複数のオブジェクト(id と Quantity を持つ)が格納されたドキュメントを挿入しています。 > db.demo506.insertOne({details:[{id:1,Quantity:4},{id:2,Qu
-
MongoDBで配列内の要素を指定して特定のドキュメントを取得する方法
MongoDBのfind()でドット表記を使った特定ドキュメントの取得MongoDBで配列内に格納されたフィールドの値を条件に、特定のドキュメントだけを取得したい場合は、find()メソッドとドット表記(dot notation)を組み合わせるのが基本です。この記事では、実際のコード例を通して、その手順をわかりやすく解説します。1. サンプルコレクションとドキュメントの作成まずはテスト用のコレクションを作成し、配列の中にオブジェクトを持つドキュメントを挿入してみましょう。insertOne()メソッドを使用して、以下のように3件のドキュメントを登録します。> db.demo672.ins