MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBのupdate()関数で値をインクリメントする方法($inc演算子の使い方)

MongoDBでは、update()関数の中でフィールドの値を加算(インクリメント)したい場合、$inc 演算子を使用します。$inc は指定した数値だけフィールドの値を増減させる更新演算子で、カウンターやスコアの管理などに非常に便利です。

1. サンプルコレクションの作成

まず、ドキュメントを含むコレクションを作成しましょう。ここではプレイヤー名とスコアを持つコレクション addInUpdateFunctionDemo を作成します。

> db.addInUpdateFunctionDemo.insertOne({"PlayerName":"Chris","PlayerScore":78});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2b3f4345990cee87fd893")
}
> db.addInUpdateFunctionDemo.insertOne({"PlayerName":"Robert","PlayerScore":88});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2b3fc345990cee87fd894")
}
> db.addInUpdateFunctionDemo.insertOne({"PlayerName":"David","PlayerScore":99});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cd2b407345990cee87fd895")
}

2. 登録されたドキュメントの確認

次に、find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.addInUpdateFunctionDemo.find().pretty();

実行すると、以下のような出力が得られます。

{
    "_id" : ObjectId("5cd2b3f4345990cee87fd893"),
    "PlayerName" : "Chris",
    "PlayerScore" : 78
}
{
    "_id" : ObjectId("5cd2b3fc345990cee87fd894"),
    "PlayerName" : "Robert",
    "PlayerScore" : 88
}
{
    "_id" : ObjectId("5cd2b407345990cee87fd895"),
    "PlayerName" : "David",
    "PlayerScore" : 99
}

3. update()関数と$inc演算子でインクリメントする

ここからが本題です。update() 関数内で $inc 演算子を使用すると、既存の値に対して加算処理を行えます。以下の例では、David(ObjectId: 5cd2b407345990cee87fd895)の PlayerScore を 201 加算しています。

> db.addInUpdateFunctionDemo.update({_id : ObjectId("5cd2b407345990cee87fd895")},{$inc: {PlayerScore: 201}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

nMatched : 1 は条件に一致したドキュメントが1件、nModified : 1 は実際に更新されたドキュメントが1件であることを示しています。

4. 更新結果の確認

もう一度すべてのドキュメントを表示して、更新が正しく反映されているか確認してみましょう。

> db.addInUpdateFunctionDemo.find().pretty();

実行結果は以下の通りです。David のスコアが 99 → 300 になっていることがわかります。

{
    "_id" : ObjectId("5cd2b3f4345990cee87fd893"),
    "PlayerName" : "Chris",
    "PlayerScore" : 78
}
{
    "_id" : ObjectId("5cd2b3fc345990cee87fd894"),
    "PlayerName" : "Robert",
    "PlayerScore" : 88
}
{
    "_id" : ObjectId("5cd2b407345990cee87fd895"),
    "PlayerName" : "David",
    "PlayerScore" : 300
}

補足:$inc演算子のポイント

  • デクリメントも可能: $inc に負の値を指定すると、値を減算できます。例:{$inc: {PlayerScore: -10}}
  • フィールドが存在しない場合: 対象のフィールドが存在しないドキュメントに $inc を使うと、指定した値で新しいフィールドが自動的に作成されます。
  • 最新の推奨メソッド: MongoDB 5.0 以降では、単一ドキュメントの更新には updateOne()、複数ドキュメントの更新には updateMany() の使用が推奨されています。使い方は同じく db.collection.updateOne({条件}, {$inc: {フィールド: 値}}) の形式です。
  • アトミックな操作: $inc による更新はサーバー側で原子的(アトミック)に実行されるため、同時アクセスがあっても競合なく安全にカウンターを増減させられます。
  1. MongoDBでレコードを更新する方法|_idを指定したupdateの基本を解説

    MongoDBのレコード更新の基本MongoDBで既存のレコード(ドキュメント)を更新するには、_idフィールドを基準に対象を特定して更新するのが基本です。ここでは、サンプルコレクションを作成し、実際にupdateメソッドを使ってレコードを更新する手順を順番に見ていきましょう。1. サンプルコレクションとドキュメントの作成まず、insertOne()メソッドを使ってコレクション「demo458」にドキュメントを3件挿入します。> db.demo458.insertOne( {_id:101,"Name":"David" } ); { "a

  2. MongoDBで配列内の要素を更新する方法|$setと位置演算子$の使い方を解説

    MongoDBで配列内の要素を更新する基本 MongoDBでドキュメント内の配列の要素を更新するには、update()メソッドに $set 演算子と位置演算子「$」を組み合わせて使用します。この組み合わせにより、クエリ条件に一致した配列要素だけをピンポイントで書き換えることができます。 ステップ1:コレクションの作成とドキュメントの挿入 まず、insertOne() メソッドを使ってサンプルデータを登録します。ここでは、大学名(CollegeName)と学費(Fees)を含む「CollegeDetails」という配列を持つドキュメントを1件作成しました。 > db.demo494.in