MongoDB - chuỗi tăng tự động: Hướng dẫn cho người mới bắt đầu

Xin chào bạn, tương lai của ngôi sao lập trình! ? Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của MongoDB và học về Chuỗi Tăng Tự Động. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - tôi sẽ là hướng dẫn viên thân thiện của bạn, và chúng ta sẽ cùng nhau từng bước. Cuối cùng của bài hướng dẫn này, bạn sẽ ngạc nhiên về những gì bạn có thể làm!

Auto-Increment Sequence

Chuỗi tăng tự động là gì?

Trước khi chúng ta bắt đầu, hãy hiểu Chuỗi Tăng Tự Động là gì. Hãy tưởng tượng bạn đang tổ chức một bữa tiệc lớn, và bạn muốn mỗi khách đến nhận một số duy nhất. Bạn bắt đầu từ 1, rồi 2, 3, và cứ thế. Đó chính là điều mà Chuỗi Tăng Tự Động làm trong cơ sở dữ liệu - nó tự động gán một số duy nhất, tăng dần cho mỗi bản ghi mới.

MongoDB không có tính năng tăng tự động nội tại như một số cơ sở dữ liệu khác. Nhưng đừng lo lắng! Chúng ta sẽ học cách tạo riêng của mình. Đó như thể bạn là một phù thủy và tạo ra của mình một lời nguyền. Đúng là cool phải không?

Sử dụng Bộ Đếm

Cách đầu tiên để tạo Chuỗi Tăng Tự Động là sử dụng một thứ gọi là Bộ Đếm. Hãy tưởng tượng này như một cuốn sổ tay đặc biệt nơi chúng ta theo dõi số của mình.

Bước 1: Tạo Bộ Đếm

Trước tiên, chúng ta cần tạo cuốn sổ tay đặc biệt của mình. Trong thuật ngữ MongoDB, chúng ta sẽ tạo một bộ sưu tập mới gọi là "counters".

db.createCollection("counters")

Bước 2: Chèn một tài liệu đếm

Bây giờ, hãy thêm một trang vào sổ tay của chúng ta cho một chuỗi cụ thể. Chúng ta sẽ gọi nó là "userId".

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

Điều này tạo một tài liệu trong bộ sưu tập counters. Trường _id là "userId" (tên chuỗi của chúng ta), và seq là 0 (số bắt đầu).

Bước 3: Sử dụng findAndModify để lấy chuỗi tiếp theo

Đây là phần kỳ diệu! Chúng ta sẽ sử dụng một thao tác đặc biệt của MongoDB gọi là findAndModify để lấy số tiếp theo trong chuỗi của mình.

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

return ret.seq;
}

Hãy phân tích này:

  • query: { _id: name } tìm tài liệu "userId".
  • update: { $inc: { seq: 1 } } tăng giá trị seq lên 1.
  • new: true yêu cầu MongoDB trả về tài liệu đã được cập nhật.

Bước 4: Sử dụng chuỗi trong bộ sưu tập của bạn

Bây giờ, khi bạn muốn chèn một người dùng mới với ID tăng tự động, bạn có thể làm như sau:

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

Mỗi lần bạn chạy điều này, nó sẽ sử dụng một ID mới, tăng dần. Đúng là kỳ diệu phải không?

Tạo hàm JavaScript

Bây giờ chúng ta đã hiểu các nguyên tắc cơ bản, hãy tạo một hàm JavaScript mạnh mẽ hơn để xử lý nhu cầu tăng tự động của mình.

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

return sequenceDocument.sequence_value;
}

Hàm này làm một số điều thú vị:

  1. Nó sử dụng findOneAndUpdate, đây là phiên bản hiện đại hơn của findAndModify.
  2. Tùy chọn upsert: true có nghĩa là nó sẽ tạo chuỗi nếu nó không tồn tại.
  3. returnDocument: "after" đảm bảo rằng chúng ta nhận được giá trị đã được cập nhật.

Sử dụng hàm JavaScript

Bây giờ, hãy sử dụng hàm mới của chúng ta!

Ví dụ 1: Tạo người dùng mới

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(`Người dùng mới được tạo với id: ${userId}`);

Trong ví dụ này, chúng ta đang tạo một người dùng mới với ID tăng tự động. Đó như thể mỗi người dùng mới nhận một số VIP tại bữa tiệc của chúng ta!

Ví dụ 2: Tạo sản phẩm mới

const productId = await getNextSequence(db, "productId");
const result = await db.collection("products").insertOne({
_id: productId,
name: "Phụ kiện Awsome",
price: 99.99
});

console.log(`Sản phẩm mới được thêm với id: ${productId}`);

Thấy sao chúng ta sử dụng cùng một hàm nhưng với tên chuỗi khác? Đó như thể chúng ta có nhiều线路, mỗi线路 có hệ thống số của riêng nó!

Bảng phương thức nhanh

Dưới đây là bảng tham khảo nhanh các phương thức chúng ta đã sử dụng:

Phương thức Mô tả
createCollection Tạo một bộ sưu tập mới
insert Chèn một tài liệu mới vào bộ sưu tập
findAndModify Tìm và sửa đổi một tài liệu
findOneAndUpdate Phiên bản hiện đại của findAndModify
insertOne Chèn một tài liệu duy nhất vào bộ sưu tập

Kết luận

Chúc mừng! Bạn vừa học cách tạo và sử dụng Chuỗi Tăng Tự Động trong MongoDB. Nhớ rằng, nó như thể bạn là người tổ chức bữa tiệc, đảm bảo mỗi người nhận một số duy nhất. Kỹ năng này sẽ rất hữu ích khi bạn xây dựng các ứng dụng cần ID duy nhất, tăng dần.

Thực hành làm cho hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này. Trước khi bạn biết, bạn sẽ tạo ra các thao tác cơ sở dữ liệu phức tạp như một chuyên gia! Hãy tiếp tục lập trình, tiếp tục học hỏi, và quan trọng nhất, hãy vui vẻ! ??‍??‍?

Credits: Image by storyset