Node.js - MongoDB 更新:初學者的全面指南

你好,未來的程式設計師們!今天,我們將要踏上一段令人興奮的旅程,探索使用 Node.js 進行 MongoDB 更新的世界。我記得當我第一次開始教這個主題時,我會看到學生們臉上充滿了興奮和困惑。但別擔心,到了這個教學的結尾,你將能夠像專業人士一樣更新 MongoDB 文件!

Node.js - MongoDB Update

理解 MongoDB 更新

在我們深入具體方法之前,讓我們花一會兒時間來理解在 MongoDB 中更新意味著什麼。想像你有一本數位筆記本(那就是我們的數據庫),裡面寫滿了信息頁(我們的文件)。有時候,你需要改變這些頁面上寫的內容。這正是 MongoDB 中的更新所做的 - 它讓我們能夠修改集合中現有的文件。

更新方法

MongoDB 為我們提供了兩種主要的文件更新方法:

方法 描述
updateOne() 更新與過濾器匹配的單個文件
updateMany() 更新與過濾器匹配的多個文件

現在,讓我們詳細探討這些方法。

updateOne():精準更新

updateOne() 方法就像一位精確的外科醫生,一次只修改一個文件。當你知道要更改哪個文件時,這個方法非常適合。

語法

db.collection.updateOne(filter, update, options)

讓我們分解一下:

  • filter:指定要更新的文件
  • update:定義要應用的修改
  • options:控制更新操作的選項參數(可選)

範例 1:更新單個字段

想像我們有一個書籍集合,我們想要更新 "The Great Gatsby" 的價格。以下是我們如何操作的:

const { MongoClient } = require('mongodb');

async function updateBookPrice() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
price: 15.99
},
};

const result = await books.updateOne(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} document`);
} finally {
await client.close();
}
}

updateBookPrice();

在這個範例中,我們使用 $set 運算符來更新價格。$set 運算符將字段的值替換為指定的值。

範例 2:添加新字段

現在,讓我們說我們想要為我們的書籍文件添加一個 "lastUpdated" 字段:

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
lastUpdated: new Date()
},
};

const result = await books.updateOne(filter, updateDoc);

這將為我們的文件添加一個名為 "lastUpdated" 的新字段,並將當前日期和時間作為值。

updateMany():批量更新

有時候,你需要一次更新多個文件。這時 updateMany() 方法就派上用場了。這就像一個老師一次批改所有的考試卷,而不是一張一張地批改。

語法

db.collection.updateMany(filter, update, options)

這些參數與 updateOne() 相同,但這個方法會更新所有與過濾器匹配的文件。

範例 3:更新多個文件

讓我們說我們想要為所有價格超過 $20 的書籍提供 10% 的折扣:

async function applyDiscount() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");

const filter = { price: { $gt: 20 } };
const updateDoc = {
$mul: {
price: 0.9
},
};

const result = await books.updateMany(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} documents`);
} finally {
await client.close();
}
}

applyDiscount();

在這個範例中,我們使用 $mul 運算符將價格乘以 0.9(應用 10% 的折扣)。過濾器中的 $gt 運算符選擇所有價格大於 20 的文件。

更新運算符

MongoDB 提供了多種更新運算符,讓我們能夠進行複雜的更新。以下是一些最常用的運算符:

運算符 描述
$set 設置字段的值
$inc 指定數量增加字段的值
$mul 指定數量乘以字段的值
$rename 重命名字段
$unset 從文件中移除字段
$min 如果指定值小於現有字段值,則更新字段
$max 如果指定值大於現有字段值,則更新字段

範例 4:在同一次更新操作中使用多個運算符

讓我們在單個更新操作中使用多個運算符:

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: { author: "F. Scott Fitzgerald" },
$inc: { copiesSold: 1000 },
$rename: { "publishYear": "yearPublished" }
};

const result = await books.updateOne(filter, updateDoc);

這個更新操作設置作者,將 copiesSold 增加 1000,並將 "publishYear" 字段重命名為 "yearPublished"。

結論

就是这样,各位!我們一起穿越了 MongoDB 更新的土地,探索了 updateOne()updateMany() 方法,甚至還輕鬆地使用了各種更新運算符。記住,熟能生巧,所以不要害怕在你的項目中嘗試這些方法。

我總是告訴我的學生,學習數據庫操作就像學習烹飪一樣 - 起初,它可能看起來很複雜,但一旦你掌握了要領,你將能夠像名廚準備美食一樣,輕鬆地制作複雜的查詢!

繼續編程,持續學習,最重要的是,享受其中的樂趣!直到下次見,快樂更新!

Credits: Image by storyset