MongoDB - ドキュメントの更新

こんにちは、将来のデータベースの魔術師たち!今日は、MongoDBのドキュメント更新のエキサイティングな世界に飛び込みます。あなたの近所の親切なコンピュータ教師として、私は多くの例と説明を交えてあなたを案内します。あなたのお気に入りの飲み物を手に取り、リラックスして、一緒にMongoDBの冒険に乗り出しましょう!

MongoDB - Update Document

MongoDBのupdate()メソッド

まずは定番のupdate()メソッドから始めましょう。Imagine you have a collection of books in your MongoDB database, and you want to update the price of a specific book. Here's how you can do it:

db.books.update(
{ title: "The Great Gatsby" },
{ $set: { price: 12.99 } }
)

この例では、MongoDBに「The Great Gatsby」というタイトルの本を見つけて、価格を12.99に設定するよう指示しています。本屋で特定の本に新しい価格タグを貼るようなものです。

でも、まだ続きます!update()メソッドにはいくつかの裏技があります。もっと複雑な例を見てみましょう:

db.books.update(
{ author: "F. Scott Fitzgerald" },
{ $inc: { copiesSold: 100 }, $set: { bestseller: true } },
{ multi: true }
)

ここでは、F. Scott Fitzgeraldのすべての本の「copiesSold」フィールドを100増やし、「bestseller」をtrueに設定します。「multi: true」オプションは、最初のドキュメントだけでなくすべての一致するドキュメントを更新するようにします。

MongoDBのsave()メソッド

次にsave()メソッドについて話しましょう。このメソッドは多機能なスイスアーミーナイフのように、新しいドキュメントをインサートするか既存のドキュメントを更新することができます。以下はその例です:

db.books.save(
{
_id: ObjectId("507f1f77bcf86cd799439011"),
title: "To Kill a Mockingbird",
author: "Harper Lee",
year: 1960,
price: 10.99
}
)

この_idを持つドキュメントが既に存在する場合は更新され、存在しない場合は新しいドキュメントがインサートされます。図書館のカタログに新しいエントリを書いたり、既存のエントリを更新したりする魔法のペンのようなものです!

MongoDBのfindOneAndUpdate()メソッド

findOneAndUpdate()メソッドは、ドキュメントを見つけ、更新し、元のドキュメントまたは更新されたドキュメントを報告する探偵のようなものです。実際に見てみましょう:

db.books.findOneAndUpdate(
{ title: "1984" },
{ $set: { genre: "Dystopian Fiction" } },
{ new: true }
)

このメソッドは「1984」という本を見つけ、ジャンルを追加し、更新されたドキュメントを返します(「new: true」のために)。図書館の司書に本を見つけてジャンルのシールを貼ってもらい、更新された本を見せるようなものです。

MongoDBのupdateOne()メソッド

updateOne()メソッドは、1つのドキュメントを更新したいときに最適です。以下はその使用例です:

db.books.updateOne(
{ title: "The Catcher in the Rye" },
{ $set: { status: "Checked Out" }, $inc: { timesCheckedOut: 1 } }
)

これは「The Catcher in the Rye」のステータスを「Checked Out」に更新し、「timesCheckedOut」カウンターを1増やします。図書館システムで単一の本のステータスを更新するようなものです。

MongoDBのupdateMany()メソッド

最後に、updateMany()メソッドです。このメソッドは、一度に複数のドキュメントに変更を加えるのに非常に便利です。以下はその例です:

db.books.updateMany(
{ year: { $lt: 1900 } },
{ $set: { category: "Classic" }, $inc: { specialEditionPrice: 5 } }
)

この操作は、1900年以前に出版されたすべての本を見つけ、「Classic」としてカテゴライズし、特別版の価格を5増やします。図書館全体の古い本を一度に更新するようなものです!

これらのメソッドをすべてを以下の表にまとめます:

メソッド 説明 使用ケース
update() 単一のドキュメントまたは複数のドキュメントを更新 一般的な更新
save() 新しいドキュメントをインサートまたは既存のドキュメントを更新 ドキュメントが存在するかどうか不明な場合
findOneAndUpdate() ドキュメントを見つけ、更新し、元のまたは更新されたドキュメントを返す ドキュメントの状態を知りたい場合
updateOne() 単一のドキュメントを更新 単一のドキュメントを更新したい場合
updateMany() 複数のドキュメントを更新 複数のドキュメントに変更を加える場合

若いパダワンたち、MongoDBでのドキュメントの更新は庭仕事のようです。慎重で正確である必要がありますが、これらのツールを使えば、データを美しく形作ることができます。

このレッスンを終えるにあたり、私は偶然にすべての本の作者を「Anonymous」に更新してしまったことがあることを思い出しました。修正するのに数時間かかりましたが、クエリが具体的である重要性を学びました。更新ボタンを押す前に、必ず条件を確認してください!

さあ、自信を持ってドキュメントを更新してください。あなたのクエリが正確で、更新が迅速であることを祈っています!

Credits: Image by storyset