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

MongoDBで特定のフィールドの値を1つだけデクリメントする方法($inc演算子)

MongoDBでは、$inc 演算子に負の値を指定することで、特定のドキュメントの数値フィールドを簡単に減らす(デクリメントする)ことができます。この記事では、実際のコード例を通して、コレクションの作成から値の減算、結果の確認までの一連の手順をわかりやすく解説します。

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

まず、insertOne() メソッドを使って、ドキュメントを格納したコレクションを作成しましょう。

>db.decrementingOperationDemo.insertOne({"ProductName":"Product-1","ProductPrice":756});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7a8ae6d78f205348bc63c")
}
>db.decrementingOperationDemo.insertOne({"ProductName":"Product-2","ProductPrice":890});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7a8b86d78f205348bc63d")
}
>db.decrementingOperationDemo.insertOne({"ProductName":"Product-3","ProductPrice":994});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7a8c66d78f205348bc63e")
}
>db.decrementingOperationDemo.insertOne({"ProductName":"Product-4","ProductPrice":1000});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd7a8d06d78f205348bc63f")
}

すべてのドキュメントを表示する

find() メソッドを使用すると、コレクション内のすべてのドキュメントを取得できます。pretty() を組み合わせれば、整形された読みやすい形式で出力されます。

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

上記のクエリを実行すると、以下のような出力が得られます。

{
   "_id" : ObjectId("5cd7a8ae6d78f205348bc63c"),
   "ProductName" : "Product-1",
   "ProductPrice" : 756
}
{
   "_id" : ObjectId("5cd7a8b86d78f205348bc63d"),
   "ProductName" : "Product-2",
   "ProductPrice" : 890
}
{
   "_id" : ObjectId("5cd7a8c66d78f205348bc63e"),
   "ProductName" : "Product-3",
   "ProductPrice" : 994
}
{
   "_id" : ObjectId("5cd7a8d06d78f205348bc63f"),
   "ProductName" : "Product-4",
   "ProductPrice" : 1000
}

値をデクリメントするクエリ

それでは、特定のドキュメントの ProductPrice フィールドの値を10だけ減らしてみましょう。$inc 演算子に負の値を指定するのがポイントです。さらに、検索条件に ProductPrice: {$gt: 0} を追加することで、値が0より大きい場合のみ更新が実行されるため、価格がマイナスになることを防ぐことができます。

> db.decrementingOperationDemo.update({_id: ObjectId("5cd7a8d06d78f205348bc63f"), ProductPrice: {$gt: 0}}, {$inc: {ProductPrice: -10}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

更新結果の確認

もう一度 find() メソッドを実行して、ドキュメントが正しく更新されているかを確認しましょう。

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

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

{
   "_id" : ObjectId("5cd7a8ae6d78f205348bc63c"),
   "ProductName" : "Product-1",
   "ProductPrice" : 756
}
{
   "_id" : ObjectId("5cd7a8b86d78f205348bc63d"),
   "ProductName" : "Product-2",
   "ProductPrice" : 890
}
{
   "_id" : ObjectId("5cd7a8c66d78f205348bc63e"),
   "ProductName" : "Product-3",
   "ProductPrice" : 994
}
{
   "_id" : ObjectId("5cd7a8d06d78f205348bc63f"),
   "ProductName" : "Product-4",
   "ProductPrice" : 990
}

実行結果を見ると、Product-4 の ProductPrice が 1000 から 990 に減少していることが確認できます。このように、MongoDBでは $inc 演算子に負の値を渡すだけで、対象のドキュメントを1つだけピンポイントにデクリメントすることが可能です。他のドキュメントには一切影響を与えないため、在庫数や価格などの管理にも安心して利用できるでしょう。

  1. MySQLで特定の列(カラム)の値だけを更新する方法

    MySQLでテーブルのデータを更新する際、UPDATE文を使えば特定の1つの列(カラム)の値だけを変更できます。WHERE句で対象の行を指定し、SET句で更新したい列とその新しい値を記述するのが基本です。本記事では、サンプルコードを使いながら、単一の列の値を更新する手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、デモ用のテーブルを作成します。 mysql> create table DemoTable770 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Value int ); Query OK, 0 r

  2. MySQLで単一の列(カラム)の値のみを更新する方法

    MySQLでは、UPDATE文を使うことで、テーブル内の特定の列(カラム)の値だけを簡単に更新できます。この記事では、サンプルテーブルを作成し、単一の列の値のみを更新する手順を具体例とともにわかりやすく解説します。 1. サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1605 -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varchar(20), -> Stude