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

MongoDBでコレクションの既存ドキュメントを更新・変更する方法を解説

MongoDBでコレクション内の既存ドキュメントを更新または変更するには、update()メソッドを使用します。基本的な構文は以下のとおりです。

db.yourCollectionName.update(yourExistingValue, yourUpdatedValue);

この記事では、実際にサンプルコレクションを作成しながら、ドキュメント更新の手順を順番に見ていきましょう。

コレクションの作成とドキュメントの挿入

まず、「updateInformation」という名前のコレクションを作成します。MongoDBでは、insert()メソッドでドキュメントを挿入すると、コレクションが自動的に作成される仕組みになっています。

> db.updateInformation.insert({"StudentName":"Larry", StudentAge:35, StudentMarks:89});

実行すると、以下のような出力が返されます。

WriteResult({ "nInserted" : 1 })

find()メソッドでドキュメントを確認する

次に、find()メソッドを使って、コレクション「updateInformation」内のドキュメントを表示してみましょう。

> db.updateInformation.find();

先ほど挿入したドキュメントが以下のように表示されます。

{ "_id" : ObjectId("5c6aa29a64f3d70fcc9147f7"), "StudentName" : "Larry", "StudentAge" : 35, "StudentMarks" : 89 }

update()メソッドでフィールド値を更新する

ここからが本題です。既存ドキュメントの「StudentAge」フィールドを35から24へ変更してみます。この場合もupdate()メソッドを使用し、$set演算子と組み合わせて更新対象のフィールドを指定します。

> db.updateInformation.update({StudentAge:35},{$set:{StudentAge:24}});

実行結果は以下のとおりです。nMatchedが1、つまり条件に一致したドキュメントが1件あり、nModifiedが1なので、実際に1件のドキュメントが更新されたことがわかります。

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

更新後のドキュメントを再確認する

更新処理が正しく行われたかどうか、pretty()メソッドを使ってドキュメントを見やすく整形して確認しましょう。

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

以下が出力結果です。

{
    "_id" : ObjectId("5c6aa29a64f3d70fcc9147f7"),
    "StudentName" : "Larry",
    "StudentAge" : 24,
    "StudentMarks" : 89
}

出力結果を見ると、「StudentAge」フィールドが35から24に更新されていることが確認できます。このように、update()メソッドと$set演算子を組み合わせることで、MongoDBのコレクション内の既存ドキュメントを簡単に変更できます。

補足:より新しい書き方について

なお、近年のMongoDB(バージョン4.2以降)では、update()メソッドは非推奨となっており、代わりにupdateOne()updateMany()メソッドの使用が推奨されています。単一ドキュメントのみを更新する場合はupdateOne()、条件に一致するすべてのドキュメントを一括更新する場合はupdateMany()を使うことで、意図しない複数ドキュメントの変更を防げます。

  1. MongoDBで複数のドキュメントを一括更新する方法|multiオプションとupdateMany()の使い方

    MongoDBで条件に一致する複数のドキュメントを一度に更新したい場合、update()メソッドに multi: true オプションを指定します。このオプションを付けないと、デフォルトでは条件に一致した最初の1件しか更新されません。本記事では、実際のコード例を使いながら、複数ドキュメントの一括更新手順をわかりやすく解説します。 1. サンプルコレクションの作成 まずは動作確認用のコレクションを作成し、ドキュメントを挿入していきます。ここではクライアント名と年齢を持つ「multiUpdateDemo」コレクションを使用します。 > db.multiUpdateDemo.insertOne

  2. 既存のドキュメントを上書きせずにMongoDBのドキュメントを更新する方法

    MongoDBで特定のフィールドの値だけを更新したい場合には、update()メソッドと$set演算子を組み合わせて使用します。この方法を使えば、既存のドキュメントを丸ごと上書きすることなく、指定したフィールドだけを安全に変更できます。 1. コレクションの作成とドキュメントの挿入 まず、insertOne()メソッドを使って、サンプル用のコレクションにドキュメントを挿入します。 > db.demo401.insertOne( ... { ... _id : 1001, ... Name : Chris, ... SubjectName