MongoDBで特定のフィールド値のみを更新するクエリの書き方
MongoDBでは、update()メソッドと$set演算子を組み合わせることで、ドキュメント全体を置き換えることなく、特定のフィールドの値だけを効率的に更新できます。本記事では、実際のコード例を通じて、その具体的な手順をわかりやすく解説します。
1. コレクションとドキュメントの作成
まずは例として、insertOne()メソッドを使って「demo557」というコレクションにドキュメントを挿入します。
> db.demo557.insertOne({Name:"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8f28e954b4472ed3e8e864")
}
> db.demo557.insertOne({Name:"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e8f28ee54b4472ed3e8e865")
}
2. 更新前のドキュメントを確認する
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo557.find();
実行結果は以下の通りです。
{ "_id" : ObjectId("5e8f28e954b4472ed3e8e864"), "Name" : "Chris" }
{ "_id" : ObjectId("5e8f28ee54b4472ed3e8e865"), "Name" : "David" }
3. 特定のフィールド値のみを更新するクエリ
以下のクエリでは、「Name」フィールドが「Chris」であるドキュメントを条件にマッチさせ、$set演算子によってその値だけを「Robert」に更新しています。_idなど他のフィールドには一切影響しません。
> db.getCollection('demo557').update({Name:"Chris"},{$set:{Name:"Robert"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
WriteResultの出力にある nMatched : 1 は1件のドキュメントが条件に一致し、nModified : 1 は1件が実際に更新されたことを示しています。
4. 更新後のドキュメントを確認する
もう一度find()メソッドを実行して、更新結果を確認しましょう。
> db.demo557.find();
実行結果は以下の通りです。「Name」フィールドのみが「Robert」に変更され、その他のデータはそのまま保持されていることが分かります。
{ "_id" : ObjectId("5e8f28e954b4472ed3e8e864"), "Name" : "Robert" }
{ "_id" : ObjectId("5e8f28ee54b4472ed3e8e865"), "Name" : "David" }
まとめ
$set演算子を使えば、指定したフィールドのみを選択的に更新できるため、意図しないデータ消失を防ぎながら安全にドキュメントを修正できます。なお、MongoDB 4.2以降では、非推奨となったupdate()の代わりに、単一ドキュメントを更新するupdateOne()や複数ドキュメントを一括更新するupdateMany()メソッドの使用が推奨されています。
-
MongoDBで配列をクエリして特定の値を取得する方法
配列から特定の値を取得するには、aggregate()メソッドと$projectステージを組み合わせて使用します。まずは、ドキュメントを含むコレクションを作成してみましょう。 > db.demo761.insertOne( ... { ... "details": [ ... { ... "
-
MySQLで既存の値に数値を加算してフィールドを更新する方法
MySQLで既存の値に値を追加してフィールドを更新するには?MySQLでは、UPDATE文とSET句を組み合わせることで、既存の値に新しい値を加算しながらフィールドを更新できます。カウンター値やスコアなど、現在の値をもとに増減させたい場合に非常に便利なテクニックです。基本構文既存の値に整数を加算する場合、基本的な構文は以下のとおりです。UPDATE テーブル名 SET カラム名 = カラム名 + 加算する整数 WHERE 条件;ポイントは、SET句の右辺に同じカラム名を指定することです。これにより「現在の値 + 加算値」が計算され、その結果で上書きされます。サンプルテーブルの作成それでは、実際