既存のドキュメントを上書きせずにMongoDBのドキュメントを更新する方法
MongoDBで特定のフィールドの値だけを更新したい場合には、update()メソッドと$set演算子を組み合わせて使用します。この方法を使えば、既存のドキュメントを丸ごと上書きすることなく、指定したフィールドだけを安全に変更できます。
1. コレクションの作成とドキュメントの挿入
まず、insertOne()メソッドを使って、サンプル用のコレクションにドキュメントを挿入します。
> db.demo401.insertOne(
... {
... "_id" : 1001,
... "Name" : "Chris",
... "SubjectName" : "MongoDB",
... "Score" : 45
... }
... );
{ "acknowledged" : true, "insertedId" : 1001 }
2. 挿入したドキュメントの確認
find()メソッドを使うと、コレクション内のすべてのドキュメントを表示できます。
> db.demo401.find();
実行すると、次のような出力が得られます。
{ "_id" : 1001, "Name" : "Chris", "SubjectName" : "MongoDB", "Score" : 45 }
3. $setを使った部分更新
ここからが本題です。既存のドキュメントを上書きせずに更新するには、更新条件とともに$setを指定します。以下の例では、「_id」が1001のドキュメントに対して「Score」フィールドだけを89に変更しています。
> db.demo401.update({_id: 1001}, {$set: {Score:89}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
nMatched: 1は条件に一致したドキュメントが1件あること、nModified: 1は実際に1件が更新されたことを示しています。$setを使っているため、「Name」や「SubjectName」など他のフィールドはそのまま保持されます。
4. 更新後のドキュメントを確認
もう一度find()を実行して、更新結果を確認しましょう。
> db.demo401.find();
出力を見ると、「Score」だけが45から89に変わっており、その他のフィールドは元のままになっています。
{ "_id" : 1001, "Name" : "Chris", "MongoDB" : "MongoDB", "Score" : 89 }
補足:最新バージョンではupdateOne()が推奨
MongoDBの新しいバージョンでは、update()は非推奨(deprecated)となっており、代わりにupdateOne()やupdateMany()の使用が推奨されています。$setの使い方はまったく同じなので、以下のように書き換えるだけでOKです。
> db.demo401.updateOne({_id: 1001}, {$set: {Score:89}})
このように$set演算子を活用すれば、ドキュメント全体を置き換えるリスクを避けながら、必要なフィールドだけをピンポイントで更新できます。誤ってデータを消してしまうトラブルを防ぐためにも、更新操作の際は必ず$setを使う習慣をつけましょう。
-
MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)
MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って
-
JavaでMongoDBコレクションの既存ドキュメントを更新する方法
MongoDBシェルのupdate()メソッドは、既存のドキュメント内の値を更新するために使用されます。 構文 db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA) JavaからMongoDBのドキュメントを操作する場合は、com.mongodb.client.MongoCollectionインターフェースが提供するupdateOne()メソッドを使用することで、条件に一致した単一のドキュメントを更新できます。 このメソッドには、次の2つの引数を渡します。 フィルター(Filter):更新対象のドキュメントを特定するための検