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

MongoDBでドキュメントの値を1つだけインクリメントする方法

MongoDBでドキュメント内の特定の値だけを更新し、インクリメント(加算)したい場合は、update()メソッド$inc演算子を組み合わせて使用します。$incは指定したフィールドの数値を増減させるための演算子で、他のフィールドに影響を与えることなくピンポイントで値を変更できるのが特徴です。

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

まず、ドキュメントを格納したコレクションを作成します。

> db.demo698.insertOne({Score:78});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d8a4551299a9f98c9398")
}
> db.demo698.insertOne({Score:56});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d8a7551299a9f98c9399")
}
> db.demo698.insertOne({Score:65});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d8aa551299a9f98c939a")
}
> db.demo698.insertOne({Score:88});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6d8b0551299a9f98c939b")
}

上記のコマンドでは、「demo698」というコレクションに対して、Scoreフィールドを持つ4つのドキュメントを挿入しています。

コレクション内の全ドキュメントを表示する

find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。

> db.demo698.find();

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

{ "_id" : ObjectId("5ea6d8a4551299a9f98c9398"), "Score" : 78 }
{ "_id" : ObjectId("5ea6d8a7551299a9f98c9399"), "Score" : 56 }
{ "_id" : ObjectId("5ea6d8aa551299a9f98c939a"), "Score" : 65 }
{ "_id" : ObjectId("5ea6d8b0551299a9f98c939b"), "Score" : 88 }

特定の値だけをインクリメントするクエリ

続いて、1つの値だけをインクリメントするクエリを見ていきましょう。ここでは、_idが「5ea6d8b0551299a9f98c939b」であるドキュメントのScoreフィールドに12を加算します。

> db.demo698.update({_id:ObjectId("5ea6d8b0551299a9f98c939b")},{$inc:{Score:12}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nModified」が1となっていることから、該当する1件のドキュメントが正常に更新されたことがわかります。

更新結果の確認

もう一度find()メソッドを実行し、更新後の状態を確認してみましょう。

> db.demo698.find();

出力は以下の通りです。

{ "_id" : ObjectId("5ea6d8a4551299a9f98c9398"), "Score" : 78 }
{ "_id" : ObjectId("5ea6d8a7551299a9f98c9399"), "Score" : 56 }
{ "_id" : ObjectId("5ea6d8aa551299a9f98c939a"), "Score" : 65 }
{ "_id" : ObjectId("5ea6d8b0551299a9f98c939b"), "Score" : 100 }

対象ドキュメントのScoreが「88」から「100」(88+12)に更新されていることが確認できました。このように、$inc演算子を使えば、条件に一致したドキュメントの指定フィールドだけを効率的にインクリメントできます。なお、負の値を指定すれば減算も可能なので、カウンター管理などさまざまな場面で活用できます。

  1. MongoDBでドキュメントを削除せずに1件だけ更新する方法(updateOneの使い方)

    MongoDBのコレクション内で1つのドキュメントだけを更新したい場合は、updateOne()メソッドを使用します。updateOne()は、指定したフィルター条件に一致した最初の1件のドキュメントのみを更新するメソッドです。既存のデータを削除することなく、特定のフィールドだけを安全に書き換えられます。サンプルコレクションの作成まず、動作確認用にドキュメントを含むコレクションを作成します。> db.demo495.insertOne({FirstName:Chris,Age:19});{ acknowledged : true, insertedId : ObjectI

  2. MongoDBで条件に一致するドキュメントを1件だけ取得する方法

    MongoDBで、指定した検索条件に一致するドキュメントを1件だけ取得したい場合は、findOne()メソッドを使用します。findOne()は、コレクション内から条件を満たすドキュメントのうち、最初に見つかった1件のみを返すメソッドです。サンプルコレクションの作成まずは、動作確認用のコレクションにドキュメントを挿入してみましょう。> db.demo596.insertOne({_id:1,"FirstName":"John","LastName":"Smith"}); { "acknowledge