MongoDBで配列オブジェクトの要素のプロパティ値をインクリメントする方法
MongoDBで配列内の特定の要素が持つプロパティ値をインクリメント(加算)するには、update()メソッドとともに$inc演算子を使用します。さらに、配列内の該当する要素を指定するために、位置演算子($)を活用します。
まずは、ドキュメントを含むコレクションを作成しましょう。
> db.demo97.insertOne({
... "Details": [
... {
... "Name": "Chris",
... "Marks": 45
... },
... {
... "Name": "Bob",
... "Marks": 88
... }
... ]
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2d6d24b8903cdd865577af")
}コレクション内の全ドキュメントを表示する
find()メソッドを使って、コレクション内のすべてのドキュメントを表示します。
> db.demo97.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e2d6d24b8903cdd865577af"), "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "Bob", "Marks" : 88 } ] }配列オブジェクト内の要素のプロパティ値をインクリメントする
次に、配列オブジェクト内の要素のプロパティ値をインクリメントするためのクエリを見ていきましょう。ここでは、「Bob」の「Marks」の値に10を加算します。
> db.demo97.update(
... { "Details.Name": "Bob"},
... { $inc: { "Details.$.Marks" : 10 } }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })このクエリのポイントは以下の通りです。
- 検索条件:
{ "Details.Name": "Bob" }によって、Details配列内の「Name」が「Bob」である要素を特定します。 - 位置演算子($):
Details.$.Marksの「$」は、条件に一致した配列要素を自動的に参照します。 - $inc演算子: 指定したフィールドの値を指定した数値だけ増加させます。負の値を指定すれば減算も可能です。
更新後、再度find()メソッドですべてのドキュメントを表示してみましょう。
> db.demo97.find();
実行結果は以下のようになります。「Bob」の「Marks」が88から98に更新されていることが確認できます。
{ "_id" : ObjectId("5e2d6d24b8903cdd865577af"), "Details" : [ { "Name" : "Chris", "Marks" : 45 }, { "Name" : "Bob", "Marks" : 98 } ] }このように、$inc演算子と位置演算子($)を組み合わせることで、MongoDBの配列内にある特定の要素のフィールド値を簡単かつ効率的に更新できます。なお、新しいバージョンのMongoDBでは、同様の操作にupdateOne()やupdateMany()メソッドを使用することも推奨されています。
-
MongoDBで配列オブジェクト内の配列要素の値をインクリメントする方法
MongoDBでは、配列オブジェクト内の特定の要素の値を増加させたい場合、$inc 演算子を使用します。本記事では、実際にコレクションを作成し、配列内の「Quantity」フィールドの値をインクリメントする手順を順番に解説します。 1. サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成します。以下の例では、「details」という配列フィールドの中に、複数のオブジェクト(id と Quantity を持つ)が格納されたドキュメントを挿入しています。 > db.demo506.insertOne({details:[{id:1,Quantity:4},{id:2,Qu
-
MongoDBで配列内の単一の値を文字列に置き換える方法
MongoDBで配列内の特定の要素だけを別の文字列に置き換えたい場合、$set 演算子と位置演算子($)を組み合わせて使用します。この記事では、実際のコード例を通じてその手順をわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、配列フィールドを持つドキュメントを含むコレクションを作成します。> db.demo564.insertOne({StudentName:[Chris,David,Mike,Sam]});{ acknowledged : true, insertedId : ObjectId(5e90880a39cfeaa