Chuyển đến nội dung chính

Tạo Collection trong MongoDB: Phương pháp thủ công và tự động

Tìm hiểu cách collection được tạo trong MongoDB, khi nào nên định nghĩa tường minh và các tùy chọn cấu hình quan trọng.
· 5 phút đọc

Khám phá cùng AI

Khi làm việc với MongoDB, đặc biệt nếu bạn là nhà phát triển chuyển từ hệ quản trị cơ sở dữ liệu quan hệ, một trong những điều đầu tiên bạn sẽ nhận thấy là thiết kế lược đồ có độ linh hoạt rất cao.

Collection trong MongoDB không cần được tạo rõ ràng trước, nhưng có những lúc việc định nghĩa tường minh và cấu hình cẩn thận là hợp lý.

Trong bài viết này, chúng ta sẽ xem xét cách và thời điểm bạn có thể muốn tạo một collection trong MongoDB, một số tùy chọn cấu hình quan trọng cần cân nhắc, và vài mẫu mã bằng JS và C# (ngôn ngữ tôi yêu thích).

Đừng lo, các driver có độ tương thích tính năng cao, nên phần lớn những gì bạn thấy hôm nay đều có thể thực hiện được trong <insert your language of choice>.

Nếu bạn mới làm quen với cơ sở dữ liệu NoSQL, hãy bắt đầu với khóa Giới thiệu về NoSQL.

MongoDB Collection là gì?

Trước khi xem cách tạo collection, hãy điểm qua collection thực chất là gì.

Nếu bạn đến từ nền tảng SQL, bạn có thể quen với các khái niệm bảng, hàng và cột. Trong MongoDB, thuật ngữ có khác chút: thay vì bảng là collection, và thay vì hàng là document với các trường (fields) chứ không phải cột.

Một trong những điểm mạnh của MongoDB là lược đồ động. Nghĩa là bạn không cần tạo collection thủ công trước khi dùng. Nếu bạn chèn một document vào một collection chưa tồn tại, MongoDB sẽ tự động tạo collection đó. Ví dụ, nếu bạn chạy:

db.movies.insertOne({ title: "The Matrix", year: 1999 });

Lệnh này sẽ cố gắng chèn một document cho bộ phim “The Matrix” vào collection movies. Nếu collection đã tồn tại, document sẽ được thêm vào. Nếu chưa, collection movies sẽ được tạo trước khi thêm document mới.

Bạn cũng có thể thêm nhiều document cùng lúc bằng insertMany thay vì insertOne.

Khi nào nên định nghĩa MongoDB Collection một cách tường minh

Mặc dù bạn có thể để MongoDB tự động tạo collection, vẫn có những lý do chính đáng để định nghĩa trước, đặc biệt trong môi trường sản xuất. Tạo collection tường minh giúp bạn có cơ hội:

  • Cấu hình capped collection cho logging hoặc caching.
  • Thiết lập quy tắc xác thực để áp đặt ràng buộc lên lược đồ.
  • Áp dụng một số chỉ mục mặc định như time-to-live (TTL). Các chỉ mục này trên trường ngày sẽ tự động xóa document trong collection dựa trên khoảng thời gian bạn chỉ định.
  • Tối ưu cho khối lượng ghi lớn bằng cách ấn định kích thước collection trước.

Đây là cách bạn tạo một collection trong MongoDB Shell:

db.createCollection("auditLogs", {
  capped: true,
  size: 10485760, // 10 MB
  max: 1000
});

Hoặc kèm xác thực:

db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "createdAt"],
      properties: {
        email: {
          bsonType: "string",
          pattern: "^.+@.+$"
        },
        createdAt: {
          bsonType: "date"
        }
      }
    }
  }
});

Mặc dù MongoDB hỗ trợ lược đồ linh hoạt, bạn vẫn có thể muốn thêm quy tắc xác thực như các trường bắt buộc hoặc chỉ định thuộc tính cho một số trường, chẳng hạn kiểu dữ liệu hoặc định dạng email như ở trên. Điều này giúp đảm bảo document của bạn tuân theo một lược đồ cụ thể.

Việc áp đặt lược đồ sẽ quen thuộc nếu bạn đến từ nền tảng SQL, và ngay cả khi không, đôi khi ứng dụng sản xuất cần có document với hình dạng dự đoán được. Vì vậy, xác thực là lựa chọn tuyệt vời!

Tạo MongoDB Collection với Driver C#

Trong ứng dụng C#, bạn cũng có thể tạo collection tường minh bằng driver MongoDB. Tuy không bắt buộc cho các thao tác cơ bản, đây là cách bạn có thể đặt các tùy chọn nâng cao bằng mã.

var options = new CreateCollectionOptions
{
    Capped = true,
    MaxSize = 10485760, // 10 MB
    MaxDocuments = 1000
};

await database.CreateCollectionAsync("auditLogs", options);

Để thêm validator:

var validator = new BsonDocument
{
    { "$jsonSchema", new BsonDocument
        {
            { "bsonType", "object" },
            { "required", new BsonArray { "email", "createdAt" } },
            { "properties", new BsonDocument
                {
                    { "email", new BsonDocument
                        {
                            { "bsonType", "string" },
                            { "pattern", "^.+@.+$" }
                        }
                    },
                    { "createdAt", new BsonDocument
                        {
                            { "bsonType", "date" }
                        }
                    }
                }
            }
        }
    }
};

var collectionOptions = new CreateCollectionOptions<BsonDocument>
{
    Validator = new BsonDocumentFilterDefinition<BsonDocument>(validator)
};

await database.CreateCollectionAsync("users", collectionOptions);

Với các nhà phát triển Python, hướng dẫn Giới thiệu về MongoDB và Python là một nguồn tham khảo tuyệt vời.

Các tùy chọn cấu hình Collection cần biết

Khi tạo collection tường minh, dưới đây là một số tùy chọn bạn nên biết:

  • capped: tạo collection có kích thước cố định
  • size: kích thước tối đa tính bằng byte cho capped collection
  • max: số lượng document tối đa được phép
  • validator: đối tượng JSON theo cú pháp schema để định nghĩa xác thực lược đồ
  • expireAfterSeconds: dùng với chỉ mục TTL để tự động xóa document

Bạn cũng có thể áp dụng chỉ mục khi tạo hoặc ngay sau đó. MongoDB sẽ không tự động tạo chỉ mục trừ khi cần cho _id.

Chỉ mục trong MongoDB giúp cải thiện hiệu năng cho các trường được truy cập thường xuyên. Chúng sẽ lưu các giá trị đó trong bộ nhớ, nghĩa là không cần truy xuất ổ cứng, có thể tiết kiệm rất nhiều thời gian và nâng cao hiệu năng khi truy cập thường xuyên.

Thực tiễn tốt nhất khi định nghĩa MongoDB Collection

Dưới đây là một vài hướng dẫn giúp bạn quyết định khi nào nên định nghĩa collection tường minh:

  • Tạo ngầm định để nhanh chóng thử nghiệm ý tưởng hoặc phát triển cục bộ, hoặc khi người dùng cuối có thể tạo nội dung động
  • Tạo tường minh khi bạn muốn áp dụng xác thực hoặc thiết lập cho lập chỉ mục hay hiệu năng

Kết luận

MongoDB nổi tiếng với lược đồ linh hoạt, cho phép chúng ta linh hoạt trong cách cấu trúc dữ liệu, bao gồm cả cách tạo và quản lý collection. Dù tạo ngầm định nhanh và tiện, định nghĩa collection tường minh mở khóa những tính năng mạnh mẽ như xác thực lược đồ, hành vi capped và tinh chỉnh hiệu năng.

Như thường lệ, MongoDB Atlas giúp quản lý collection dễ dàng hơn với công cụ giao diện, tự động hóa và thông tin hiệu năng tích hợp. Và nếu bạn làm việc với .NET, driver C# hỗ trợ mô hình kiểu mạnh và API dạng fluent.

Khi cân nhắc thực tiễn tốt nhất để định nghĩa collection trong MongoDB, hiểu các nguyên tắc thiết kế cơ sở dữ liệu căn bản cũng rất hữu ích.

Chúc bạn viết code vui vẻ! Mong rằng các collection của bạn sẽ nhanh, hợp lệ và được lập chỉ mục tốt!

Câu hỏi thường gặp

Sự khác nhau giữa tạo collection ngầm định và tường minh trong MongoDB là gì?
  • Tạo ngầm định: MongoDB tự động tạo collection khi bạn chèn một document vào collection chưa tồn tại. Hữu ích cho việc dựng mẫu nhanh hoặc phát triển.
  • Tạo tường minh: Bạn định nghĩa collection thủ công trước khi dùng, thường để cấu hình các thiết lập nâng cao như quy tắc xác thực, kích thước cố định (capped) hoặc lập chỉ mục. Khuyến nghị áp dụng trong môi trường sản xuất.
Khi nào tôi nên tạo collection tường minh thay vì để MongoDB tự động tạo?

Bạn nên tạo collection tường minh khi: cần xác thực lược đồ, capped collection, tối ưu hiệu năng và chỉ mục mặc định.

Làm sao tôi áp đặt lược đồ trong MongoDB nếu nó không có lược đồ cố định?

MongoDB hỗ trợ xác thực lược đồ JSON, cho phép bạn định nghĩa các quy tắc cho cấu trúc document.

Capped collection là gì và khi nào tôi nên dùng?

Capped collection là các collection có kích thước cố định và sẽ tự động ghi đè document cũ khi đầy.

Làm sao để tạo collection với chỉ mục TTL (Time-To-Live)?

Chỉ mục TTL tự động xóa document sau một thời gian xác định. Trước tiên, tạo collection, sau đó thêm chỉ mục.

Luce Carter

Tác giả

Luce Carter

Luce Carter là Chuyên gia Vận động Nhà phát triển Cấp cao tại MongoDB, Microsoft MVP, Contentful Dev Hero, tác giả cuốn Beginning MongoDB Atlas with .NET, và là người yêu thích lập trình, ánh nắng và việc học hỏi.

Chủ đề

Liên quan