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

MongoDBで学生IDと名前を指定してドキュメントを更新する方法

MongoDBのドキュメントを更新するには、update()メソッドと$set演算子を使用します。$setは指定したフィールドだけを変更し、ドキュメント内の他のフィールドに影響を与えないため、部分的な更新に最適です。

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

まず、学生情報(StudentId と StudentName)を持つドキュメントを格納するコレクションを作成し、4件のデータを挿入します。

> db.demo427.insertOne({"StudentId":101,"StudentName":"Chris Brown"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75e711bbc41e36cc3cae75")
}
> db.demo427.insertOne({"StudentId":102,"StudentName":"David Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75e71abbc41e36cc3cae76")
}
> db.demo427.insertOne({"StudentId":103,"StudentName":"John Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75e725bbc41e36cc3cae77")
}
> db.demo427.insertOne({"StudentId":104,"StudentName":"Carol Taylor"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e75e733bbc41e36cc3cae78")
}

挿入したドキュメントの確認

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

> db.demo427.find();

このコマンドを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e75e711bbc41e36cc3cae75"), "StudentId" : 101, "StudentName" : "Chris Brown" }
{ "_id" : ObjectId("5e75e71abbc41e36cc3cae76"), "StudentId" : 102, "StudentName" : "David Miller" }
{ "_id" : ObjectId("5e75e725bbc41e36cc3cae77"), "StudentId" : 103, "StudentName" : "John Smith" }
{ "_id" : ObjectId("5e75e733bbc41e36cc3cae78"), "StudentId" : 104, "StudentName" : "Carol Taylor" }

ドキュメントを更新するクエリ

続いて、MongoDBのドキュメントを更新するためのクエリを見ていきます。次の例では、StudentId が 102 のドキュメントを検索し、StudentName を「John Doe」に変更しています。

> db.demo427.update({"StudentId":102},{$set:{"StudentName":"John Doe"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

実行結果の「nModified : 1」は、1件のドキュメントが正常に更新されたことを意味します。「nMatched : 1」は条件に一致したドキュメントが1件あったことを示しています。

更新後のドキュメントの確認

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

> db.demo427.find();

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

{ "_id" : ObjectId("5e75e711bbc41e36cc3cae75"), "StudentId" : 101, "StudentName" : "Chris Brown" }
{ "_id" : ObjectId("5e75e71abbc41e36cc3cae76"), "StudentId" : 102, "StudentName" : "John Doe" }
{ "_id" : ObjectId("5e75e725bbc41e36cc3cae77"), "StudentId" : 103, "StudentName" : "John Smith" }
{ "_id" : ObjectId("5e75e733bbc41e36cc3cae78"), "StudentId" : 104, "StudentName" : "Carol Taylor" }

出力結果を見ると、StudentId が 102 のドキュメントの StudentName だけが「David Miller」から「John Doe」に更新され、他のドキュメントはそのまま維持されていることがわかります。

補足:最新のMongoDBでの推奨される書き方

MongoDB 4.2以降では、従来のupdate()は非推奨(deprecated)となっており、代わりにupdateOne()updateMany()の使用が推奨されています。上記の更新処理は、次のように書き換えることができます。

> db.demo427.updateOne({"StudentId":102},{$set:{"StudentName":"John Doe"}});

updateOne()は条件に一致した最初の1件のみを更新し、updateMany()は一致したすべてのドキュメントを更新します。用途に応じて使い分けるとよいでしょう。

  1. MongoDBでドキュメントを更新する方法:$set演算子を使って上書きを防ぐテクニック

    MongoDBで更新時に上書きを防ぐ方法MongoDBでは、update()メソッドと$set演算子を組み合わせることで、既存のドキュメント全体を置き換えることなく、指定したフィールドだけを安全に更新できます。この記事では、実際のコード例を通じて、その手順と動作を詳しく解説します。1. コレクションとドキュメントの作成まず、insertOne()メソッドを使ってサンプルコレクションにドキュメントを挿入します。> db.demo601.insertOne( ... { ... id:1, ... userDetails: ... { ...

  2. MongoDBでネストされたドキュメントを更新する方法|位置演算子$を使った配列要素の更新手順

    MongoDBでは、ドキュメント内の配列に格納されたネストされた(入れ子の)ドキュメントも、位置演算子「$」を使うことで効率的に更新できます。この記事では、実際のコード例を通じて、配列内の特定のサブドキュメントを更新する手順をわかりやすく解説します。 1. サンプルコレクションの作成 まず、insertOne()メソッドを使用して、ネストされたドキュメントを含むコレクションを作成します。ここでは「Information」というフィールドに、複数のサブドキュメントを持つ配列を格納しています。 > db.demo595.insertOne( { Information: [ { _i