MongoDBで配列オブジェクト内の配列要素の値をインクリメントする方法
MongoDBでは、配列オブジェクト内の特定の要素の値を増加させたい場合、$inc 演算子を使用します。本記事では、実際にコレクションを作成し、配列内の「Quantity」フィールドの値をインクリメントする手順を順番に解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成します。以下の例では、「details」という配列フィールドの中に、複数のオブジェクト(id と Quantity を持つ)が格納されたドキュメントを挿入しています。
> db.demo506.insertOne({"details":[{id:1,Quantity:4},{id:2,Quantity:3},{id:3,Quantity:2},{id:4,Quantity:7}]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e882ed6987b6e0e9d18f576")
}
2. 挿入したドキュメントの確認
find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo506.find().pretty();
上記のクエリを実行すると、次のような出力が得られます。
{
"_id" : ObjectId("5e882ed6987b6e0e9d18f576"),
"details" : [
{
"id" : 1,
"Quantity" : 4
},
{
"id" : 2,
"Quantity" : 3
},
{
"id" : 3,
"Quantity" : 2
},
{
"id" : 4,
"Quantity" : 7
}
]
}
3. $inc と位置演算子($)を使って配列要素の値を増やす
配列オブジェクト内の「Quantity」フィールドの値をインクリメントするには、update() メソッドと $inc 演算子、さらに 位置演算子($) を組み合わせます。
位置演算子「$」は、クエリ条件に一致した最初の配列要素を自動的に識別し、その要素だけを更新対象にします。以下の例では、「details.id」が 2 の要素を検索し、該当する要素の Quantity に 10 を加算しています。
> db.demo506.update({"details.id":2},{$inc:{"details.$.Quantity":10}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
出力結果を見ると、1件のドキュメントがマッチし、1件が更新されたことがわかります。
4. 更新後のドキュメントを確認する
再度 find() メソッドを実行して、更新結果を確認します。
> db.demo506.find().pretty();
実行すると、次のように id が 2 の要素の Quantity のみが「3」から「13」に増加していることが確認できます。
{
"_id" : ObjectId("5e882ed6987b6e0e9d18f576"),
"details" : [
{
"id" : 1,
"Quantity" : 4
},
{
"id" : 2,
"Quantity" : 13
},
{
"id" : 3,
"Quantity" : 2
},
{
"id" : 4,
"Quantity" : 7
}
]
}
まとめ
MongoDBで配列内の特定の要素の値を増減させる場合は、$inc 演算子と 位置演算子($) を組み合わせるのが基本です。「details.$.Quantity」のように「配列フィールド名.$.対象フィールド名」と指定することで、クエリ条件に一致した配列要素のみを効率的に更新できます。なお、新しいバージョンのMongoDBでは update() の代わりに updateOne() や updateMany() の使用が推奨されているため、実務ではこちらを採用するとよいでしょう。
-
MongoDBで特定のキーを指定して配列内のオブジェクトを更新する方法
MongoDBでは、位置演算子「$」とupdate()メソッドを組み合わせることで、配列内の特定の条件に一致するオブジェクトだけを効率的に更新できます。この記事では、商品情報の配列を持つドキュメントを例に、その具体的な手順を解説します。 1. コレクションとドキュメントの作成 まず、insertOne()メソッドを使って、配列フィールド「ProductInformation」を含むドキュメントを作成します。 > db.demo419.insertOne({ProductInformation:[{ProductName:Product-1,ProductPrice:500},{Prod
-
MongoDBで配列内の単一の値を文字列に置き換える方法
MongoDBで配列内の特定の要素だけを別の文字列に置き換えたい場合、$set 演算子と位置演算子($)を組み合わせて使用します。この記事では、実際のコード例を通じてその手順をわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成します。> db.demo564.insertOne({StudentName:[Chris,David,Mike,Sam]});{ acknowledged : true, insertedId : ObjectId(5e90880a39cfeaa