MongoDBでフィールドの値をインクリメントする方法|$inc演算子の使い方を解説
MongoDBでフィールドの値をインクリメントするには?
MongoDBでフィールドの値を増加(インクリメント)させたい場合には、$inc 演算子を使用します。$inc は、指定したフィールドの現在の値に対して数値を加算できる便利な更新演算子で、アクセスカウンターの管理やゲームのスコア加算など、さまざまな場面で活用されています。
ここでは、実際にサンプルコレクションを作成しながら、$inc 演算子の基本的な使い方をステップごとに見ていきましょう。
ステップ1:サンプルコレクションの作成
まず、insertOne() メソッドを使って、「incrementDemo」という名前のコレクションにドキュメントを3件挿入します。
> db.incrementDemo.insertOne({"PlayerScore":100});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e")
}
> db.incrementDemo.insertOne({"PlayerScore":290});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc81ce28f9e6ff3eb0ce44f")
}
> db.incrementDemo.insertOne({"PlayerScore":560});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cc81ce68f9e6ff3eb0ce450")
}ステップ2:登録されたドキュメントの確認
次に、find() メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.incrementDemo.find().pretty();
上記のクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e"), "PlayerScore" : 100 }
{ "_id" : ObjectId("5cc81ce28f9e6ff3eb0ce44f"), "PlayerScore" : 290 }
{ "_id" : ObjectId("5cc81ce68f9e6ff3eb0ce450"), "PlayerScore" : 560 }ステップ3:$inc演算子でフィールドの値を増やす
それでは、update() メソッドと $inc 演算子を組み合わせて、特定のドキュメントの「PlayerScore」フィールドを10だけ増やしてみます。
> db.incrementDemo.update({ _id:ObjectId("5cc81ce28f9e6ff3eb0ce44f") },{ $inc: {"PlayerScore":10 }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })上記のクエリでは、「PlayerScore」が 290 のドキュメント(ObjectId: 5cc81ce28f9e6ff3eb0ce44f)を検索条件として指定し、その値に 10 を加算しています。WriteResult の「nModified : 1」は、1件のドキュメントが正常に更新されたことを示しています。
ステップ4:更新結果の確認
もう一度 find() を実行して、更新が正しく反映されているかを確認しましょう。
> db.incrementDemo.find().pretty();
実行すると、以下のように出力されます。
{ "_id" : ObjectId("5cc81cdd8f9e6ff3eb0ce44e"), "PlayerScore" : 100 }
{ "_id" : ObjectId("5cc81ce28f9e6ff3eb0ce44f"), "PlayerScore" : 300 }
{ "_id" : ObjectId("5cc81ce68f9e6ff3eb0ce450"), "PlayerScore" : 560 }ご覧のとおり、対象ドキュメントの「PlayerScore」が 290 から 300 に更新されました。$inc 演算子を使えば、アプリケーション側で現在の値を取得して計算する必要がなく、データベース側でアトミック(不可分)に値を加算できます。また、負の数を指定すれば減算(デクリメント)も可能です。なお、MongoDBの比較的新しいバージョンでは、非推奨となった update() の代わりに updateOne() や updateMany() を使用することが推奨されている点にも留意しておきましょう。
-
MongoDBコレクション内の空のフィールドをチェックする方法
MongoDBのコレクション内に空(空文字列)のフィールドが存在するかどうかを調べたい場合、$exists演算子と$eq演算子を組み合わせて使うのが効果的です。この記事では、実際にコレクションを作成しながら、空のフィールドを持つドキュメントを検索する具体的な手順を解説します。 ポイント:$exists と $eq の組み合わせ MongoDBでは「フィールドが存在するが値が空文字列である」状態と、「フィールド自体が存在しない」「値がnullである」状態は区別されます。そのため、空文字列を正確に検索するには次のような条件を使います。 { フィールド名 : { $exists : true, $
-
MongoDBの_idフィールドを非表示にする方法
MongoDBの_idフィールドを非表示にする方法MongoDBでは、find()メソッドでドキュメントを検索すると、デフォルトで_idフィールド(ObjectId)が必ず結果に含まれます。しかし、射影(プロジェクション)という仕組みを使えば、この_idフィールドを非表示にし、必要なフィールドだけを取得することが可能です。本記事では、具体的な手順をサンプルコード付きで解説します。1. コレクションとドキュメントの作成まず、サンプル用のコレクションを作成し、ドキュメントを挿入します。> db.demo575.insertOne({id:101, Information:{Name:&quo