MongoDB - 更新文件

你好,未來的數據庫巫師們!今天,我們將深入MongoDB文件更新的精彩世界。作為你們親切友善的鄰居計算機老師,我在這裡將通過大量的範例和解釋來引導你們。所以,拿起你們最喜歡的飲料,舒適地坐好,讓我們一起踏上這次MongoDB的冒險之旅!

MongoDB - Update Document

MongoDB update() 方法

我們從經典的update()方法開始。想像一下,你們的MongoDB數據庫中有一個圖書集合,你想更新一本特定書的價格。下面是如何操作的:

db.books.update(
{ title: "了不起的盖茨比" },
{ $set: { price: 12.99 } }
)

在這個範例中,我們告訴MongoDB尋找標題為"了不起的盖茨比"的書並將其價格設為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: "杀死一只知更鸟",
author: "Harper Lee",
year: 1960,
price: 10.99
}
)

如果已經存在具有這個_id的文件,它將被更新。如果不存在,將插入新的文件。這就像有一支魔杖,既可以在你們的圖書目錄中寫入新的條目,也可以更新現有的條目!

MongoDB findOneAndUpdate() 方法

findOneAndUpdate()方法就像一名偵探,找到一個文件,更新它,然後回報原始文件或更新後的文件。讓我們看看它是如何工作的:

db.books.findOneAndUpdate(
{ title: "1984" },
{ $set: { genre: "反乌托邦小说" } },
{ new: true }
)

這個方法找到"1984"這本書,添加一個類型,並返回更新後的文件(因為'new: true')。這就像請你的圖書管理員找到一本書,添加一個類型標籤,並向你展示更新後的書。

MongoDB updateOne() 方法

當你確定只想更新一個文件時,updateOne()方法非常完美。下面是如何使用它的:

db.books.updateOne(
{ title: "麦田里的守望者" },
{ $set: { status: "借出" }, $inc: { timesCheckedOut: 1 } }
)

這將"麦田里的守望者"的狀態更新為"借出",並將'timesCheckedOut'計數器增加1。這就像在你們的圖書系統中更新單本書的狀態。

MongoDB updateMany() 方法

最後但同樣重要的是,我們有updateMany()。當你需要一次對多個文件進行更改時,這個方法非常棒。讓我們看一個範例:

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

這個操作找到所有出版於1900年以前的書,將它們分類為"经典",並將它們的特別版價格增加5。這就像穿越你的整個圖書館並一次更新所有的老書!

現在,讓我們總結所有這些方法在一個方便的表格中:

方法 描述 使用案例
update() 更新單個文件或多個文件 通用更新
save() 插入新文件或更新現有文件 當你不確定文件是否存在時
findOneAndUpdate() 找到文件,更新它,並返回原始文件或更新後的文件 當你需要知道更新之前或之後文件的狀態
updateOne() 更新單個文件 當你確定只想更新一個文件時
updateMany() 更新多個文件 當你需要一次對多個文件進行更改時

記住,年輕的學徒們,在MongoDB中更新文件就像照顧花園一樣。你需要小心並且精確,但有了這些工具,你可以美麗地塑造你的數據。

當我們總結這課時,我想起了一次我意外將數據庫中的所有書更新為"匿名"作者。我花了幾個小時來修復,但這教會了我精確查詢的重要性。在點擊更新按鈕之前,請務必雙重檢查你的條件!

現在,去信心滿滿地更新你的文件吧。願你的查詢精確,更新迅速!

Credits: Image by storyset