MongoDBでドキュメントを丸ごと置き換えて更新する方法
MongoDBでドキュメント全体を置き換えて更新する手順
MongoDBでは、update()メソッドを使うことで、既存のドキュメントの一部だけを変更するのではなく、ドキュメント全体を新しい内容で置き換えることができます。ここでは、その具体的な手順をサンプルコード付きで解説します。
1. サンプルコレクションの作成
まず、insertOne()メソッドを使って、ドキュメントを1件含むコレクションを作成します。
> db.replacingEntireDocumentDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd3119bb64f4b851c3a13e8")
}
上記のコマンドでは、学生の名前(姓・名)と国名を持つドキュメントを挿入しています。
2. 挿入したドキュメントの確認
find()メソッドにpretty()を組み合わせると、コレクション内のドキュメントを見やすい形式で表示できます。
> db.replacingEntireDocumentDemo.find().pretty();
実行結果は以下のようになります。
{
"_id" : ObjectId("5cd3119bb64f4b851c3a13e8"),
"StudentFirstName" : "John",
"StudentLastName" : "Smith",
"StudentCountryName" : "US"
}
3. ドキュメント全体の置き換え
次に、update()メソッドの第1引数に検索条件、第2引数に新しいドキュメントの内容を指定します。このとき、更新演算子($setなど)を使わずに完全なドキュメントを渡すと、元のフィールドはすべて削除され、新しい内容に丸ごと置き換えられます。
> db.replacingEntireDocumentDemo.update({"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"}, {"StudentFirstName":"David","StudentLastName":"Miller","StudentCountryName":"AUS"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
実行結果のnModified : 1は、1件のドキュメントが正常に更新されたことを示しています。
4. 更新後のドキュメントの確認
もう一度、すべてのレコードを表示して、更新が正しく反映されているか確認しましょう。
> db.replacingEntireDocumentDemo.find().pretty();
出力結果は以下の通りです。
{
"_id" : ObjectId("5cd3119bb64f4b851c3a13e8"),
"StudentFirstName" : "David",
"StudentLastName" : "Miller",
"StudentCountryName" : "AUS"
}
注意点
ドキュメント全体を置き換える場合、以下のポイントに留意してください。
_idフィールドは自動的に保持されます。- 第2引数に指定しなかったフィールドはすべて失われます。部分的な更新を行いたい場合は、
$setなどの更新演算子を使用してください。 - モダンなMongoDBでは、
replaceOne()メソッドやupdateOne()/updateMany()の使用が推奨されています。
-
【MongoDB】ネストされた(入れ子構造の)ドキュメントを更新するクエリの書き方
MongoDBでは、入れ子(ネスト)になったサブドキュメントのフィールドを更新する際、update()メソッドとドット表記(dot notation)を組み合わせて使用します。ドット表記を使うことで、深い階層にあるフィールドを直接指定して値を変更できます。1. サンプルコレクションの作成まず、ネストされたドキュメントを含むコレクションを作成しましょう。以下のコマンドでdemo607というコレクションにドキュメントを挿入します。> db.demo607.insertOne( ... { ... id: 1, ... Info1 : { ...
-
MongoDBの埋め込みドキュメントから特定の要素を抽出する方法($unwind・$match・$projectの活用)
MongoDBでは、配列形式の埋め込みドキュメントから特定の条件に合う要素だけを取り出したい場面がよくあります。そのような場合は、集計(Aggregation)パイプラインで $unwind、$match、$project を組み合わせることで、目的のデータを効率的に抽出できます。コレクションの作成とドキュメントの挿入まず、insertOne() メソッドを使って、学生情報を配列として持つコレクションを作成します。> db.demo744.insertOne( ... { ... studentInformation: ... [ ...