MongoDBで全従業員の給与フィールドを10%引き上げて更新する方法
MongoDBでは、$mul演算子を使うことで、数値フィールドの値に指定した倍率を掛けて一括更新できます。本記事では、従業員コレクション(employee collection)内の全従業員の給与を10%増加させる具体的手順を解説します。
1. サンプルコレクションの作成
まず、ドキュメントを格納するコレクションを作成します。以下のようにinsertOne()メソッドを使用して、2名分の従業員データを挿入します。
> db.demo417.insertOne({"EmployeeName":"Chris","EmployeeSalary":500});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e723ebbb912067e57771ae4")
}
> db.demo417.insertOne({"EmployeeName":"Mike","EmployeeSalary":1000});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e723ed7b912067e57771ae5")
}2. 更新前のドキュメント確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.demo417.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e723ebbb912067e57771ae4"), "EmployeeName" : "Chris", "EmployeeSalary" : 500 }
{ "_id" : ObjectId("5e723ed7b912067e57771ae5"), "EmployeeName" : "Mike", "EmployeeSalary" : 1000 }3. 給与を10%増加させる更新クエリ
ここが本題です。各従業員の給与フィールド(EmployeeSalary)の値を10%増やすには、$mul演算子に1.1を指定します。10%増加=元の値×1.1となるためです。
さらに、複数のドキュメントを同時に更新するために、第3引数に{multi:true}を指定している点にも注目してください。これを忘れると、条件に一致した最初の1件しか更新されません。
> db.demo417.update({ "EmployeeName": { $in: ["Chris", "Mike"] } }, { $mul: { EmployeeSalary: 1.1 }},{multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })実行結果を見ると、nMatched: 2(2件が一致)、nModified: 2(2件が更新された)ことがわかります。
4. 更新後の結果確認
再度find()メソッドを実行して、更新後のドキュメントを確認しましょう。
> db.demo417.find();
以下の出力のとおり、両名の給与が正しく10%増加しています。
{ "_id" : ObjectId("5e723ebbb912067e57771ae4"), "EmployeeName" : "Chris", "EmployeeSalary" : 550 }
{ "_id" : ObjectId("5e723ed7b912067e57771ae5"), "EmployeeName" : "Mike", "EmployeeSalary" : 1100 }ポイントまとめ
$mul演算子は、フィールドの現在値に指定した数値を掛け算して更新する演算子です。- 10%の増加は「×1.1」、逆に10%の減価は「×0.9」で表現できます。
- 複数ドキュメントを一括更新する場合は
{multi:true}オプションが必要です(MongoDB 4.2以降ではupdateMany()の使用も推奨されます)。
このように、MongoDBの$mul演算子を活用すれば、割合ベースの給与改定や価格変更などの処理をシンプルなクエリで効率的に実行できます。
-
MongoDBでコレクション内のドキュメントの各フィールドを数式を使って更新する方法
コレクション内のドキュメントの各フィールドを数式(計算式)で一括更新したい場合は、MongoDBの update() メソッドに $mul 演算子と全位置演算子 $[] を組み合わせて使用します。本記事では、配列内のすべての要素に対して特定のフィールドの値を乗算で更新する具体的な手順を解説します。サンプルコレクションの作成まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo749.insertOne({details:[{id:1,a:10},{id:2,a:5},{id:3,a:20}]}); { acknowledge
-
MySQLでNULLのフィールドを特定の値に一括更新する方法(IS NULL句の使い方)
はじめに MySQLでは、IS NULL演算子とUPDATE文を組み合わせることで、NULLになっているフィールドだけを特定の値で効率的に更新できます。NULLは「=」や「!=」では比較できないため、必ずIS NULLを使う点がポイントです。 この記事では、実際のサンプルコードを使いながら、NULLのレコードだけを別の値で更新する手順をわかりやすく解説します。 1. テーブルを作成する まず、テスト用のテーブルを作成しましょう。ここでは学生のスコアを格納する StudentScore カラムを持つテーブルを作成します。 mysql> create table DemoTable (