MongoDB - 自動遞增序號:初學者指南

你好,未來的編程超新星!? 今天,我們將踏上一段令人興奮的旅程,進入 MongoDB 的世界,並學習有關自動遞增序號的知識。別擔心如果你從未寫過一行代碼——我會成為你的友好導師,我們會一步步學習。到了這個教學的結尾,你將會對你所學到的感到驚奇!

Auto-Increment Sequence

自動遞增序號是什麼?

在我們深入之前,讓我們先了解自動遞增序號是什麼。想像你正在組織一個大型派對,並且你想在每位來賓到達時給他們一個獨特的號碼。你從1開始,然後是2、3,以此類推。這基本上就是數據庫中自動遞增序號的作用——它會自動為每個新記錄分配一個獨特的、遞增的數字。

現在,MongoDB 沒有像其他一些數據庫那樣內置的自動遞增功能。但別擔心!我們將學習如何自己創建。這就像是一個巫師在創造自己的魔法咒語。酷炫吧?

使用計數器集合

我們創建自動遞增序號的第一個技巧是使用所謂的計數器集合。把這個想像成我們用來記錄數字的特殊筆記本。

步驟 1:創建計數器集合

首先,我們需要創建我們的特殊筆記本。在 MongoDB 的術語中,我們將創建一個名為 "counters" 的新集合。

db.createCollection("counters")

步驟 2:插入計數器文件

現在,讓我們在我們的筆記本中為特定序號添加一頁。我們將稱之為 "userId"。

db.counters.insert(
{
_id: "userId",
seq: 0
}
)

這在我們的計數器集合中創建了一個文件。_id 字段是 "userId"(我們的序號名),而 seq 是 0(我們的起始數字)。

步驟 3:使用 findAndModify 獲取下一個序號

這裡就是魔法發生的地方!我們將使用一個特殊的 MongoDB 操作叫做 findAndModify 來獲取我們序號中的下一個數字。

function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);

return ret.seq;
}

讓我們分解一下:

  • query: { _id: name } 找到我們的 "userId" 文件。
  • update: { $inc: { seq: 1 } }seq 值增加 1。
  • new: true 告訴 MongoDB 返回更新後的文件。

步驟 4:在您的集合中使用序號

現在,當您想要插入一個具有自動遞增 ID 的新用戶時,您可以這樣做:

db.users.insert(
{
_id: getNextSequence("userId"),
name: "Sarah Connor",
age: 29
}
)

每次您運行這個,它都會使用一個新的、遞增的 ID。神奇吧?

創建 JavaScript 函數

現在我們了解了基本知識,讓我們創建一個更健壯的 JavaScript 函數來處理我們的自動遞增需求。

function getNextSequence(db, sequenceName) {
const sequenceDocument = db.collection("counters").findOneAndUpdate(
{ _id: sequenceName },
{ $inc: { sequence_value: 1 } },
{ returnDocument: "after", upsert: true }
);

return sequenceDocument.sequence_value;
}

這個函數做了幾件酷炫的事情:

  1. 它使用 findOneAndUpdate,這是 findAndModify 的更現代版本。
  2. upsert: true 選項意味著如果序號不存在,它將創建序號。
  3. returnDocument: "after" 確保我們獲得更新後的值。

使用 JavaScript 函數

現在,讓我們將我們閃亮的新函數投入使用!

示例 1:創建一個新用戶

const db = client.db("myDatabase");

const userId = await getNextSequence(db, "userId");
const result = await db.collection("users").insertOne({
_id: userId,
name: "John Doe",
email: "[email protected]"
});

console.log(`已創建新用戶,ID 為:${userId}`);

在這個示例中,我們正在創建一個具有自動遞增 ID 的新用戶。這就像在我們的派對上給每個新用戶一個 VIP 號碼!

示例 2:創建一個新產品

const productId = await getNextSequence(db, "productId");
const result = await db.collection("products").insertOne({
_id: productId,
name: "Awesome Gadget",
price: 99.99
});

console.log(`已添加新產品,ID 為:${productId}`);

看我們如何使用同一個函數,但是有不同的序號名稱?這就像有多條派對線,每條線都有自己的一套編號系統!

總結

恭喜你!你剛剛學會了如何在 MongoDB 中創建和使用自動遞增序號。記住,這就像是一個派對組織者,確保每個人都得到一個獨特的號碼。這個技能在你構建需要唯一、遞增 ID 的應用程序時會派上用場。

實踐使人完美,所以不要害怕嘗試這些概念。在你意識到之前,你將能夠像專家一樣創建複雜的數據庫操作!持續編程,持續學習,最重要的是,玩得開心!??‍??‍?

Credits: Image by storyset