~/VibeHandbook
PDF miễn phí

Cơ sở dữ liệu

mongodb.com

MongoDB

Nó là gì

Hãy tưởng tượng một tập hồ sơ gồm các thẻ chỉ mục, trong đó mỗi thẻ có thể mang các trường thông tin khác nhau, thay vì một bảng tính cố định mà mọi hàng đều phải có cùng các cột. MongoDB hoạt động giống như tập hồ sơ thẻ đó. Đây là một cơ sở dữ liệu tài liệu (document ) lưu trữ dữ liệu dưới dạng các tài liệu linh hoạt (hãy nghĩ mỗi "tài liệu" như một thẻ) được nhóm lại thành các bộ sưu tập (collection). Các tài liệu được lưu ở định dạng gọi là BSON, tức dạng nhị phân của (JavaScript Object Notation) do MongoDB sử dụng — JSON là một cách phổ biến để viết dữ liệu dưới dạng các trường có tên. Thay vì các bảng và hàng cứng nhắc, mỗi tài liệu có thể có hình dạng riêng, giúp việc thay đổi mô hình dữ liệu diễn ra nhanh chóng và dễ dàng. Đây là lựa chọn phổ biến cho các ứng dụng có dữ liệu ánh xạ tự nhiên tới các đối tượng lồng nhau.

Điểm mạnh

  • Schema linh hoạt: các tài liệu có thể khác nhau và thay đổi theo thời gian mà không cần chạy migration.
  • Dữ liệu ánh xạ trực tiếp tới các đối tượng của ứng dụng, giảm bớt code chuyển đổi qua lại.
  • Ngôn ngữ truy vấn phong phú cùng với một pipeline tổng hợp (aggregation) mạnh mẽ.
  • Mở rộng theo chiều ngang (horizontal scaling) nhờ tính năng sharding tích hợp sẵn.
  • Hỗ trợ tốt cho các trường lồng nhau và mảng (array).

Đánh đổi

  • Dễ tạo ra dữ liệu không nhất quán nếu không thiết kế schema một cách kỷ luật.
  • Giao dịch (transaction) trên nhiều tài liệu vẫn tồn tại nhưng nặng nề hơn so với các cơ sở dữ liệu quan hệ.
  • Các phép join ($lookup) bị hạn chế so với (Structured Query Language); dữ liệu thường được phi chuẩn hóa (denormalized).
  • Phi chuẩn hóa (denormalization — lưu các bản sao của cùng một dữ liệu ở nhiều nơi để tránh phải tra cứu) có thể làm dữ liệu trùng lặp và khiến việc cập nhật phức tạp hơn.

Khi nào nên dùng

Chọn MongoDB cho các hệ thống quản lý nội dung, danh mục sản phẩm, hồ sơ người dùng, ghi log sự kiện, và các ứng dụng có dữ liệu thay đổi hoặc phân cấp, nơi tài liệu phù hợp hơn so với các bảng đã chuẩn hóa.

Phù hợp với vibe coding ra sao

Khi chỉ đạo AI, đừng để "không có schema" biến thành "không có kế hoạch." Hãy yêu cầu AI định nghĩa rõ ràng hình dạng của tài liệu và thực thi điều đó bằng xác thực JSON Schema hoặc một ODM (Object-Document Mapper — công cụ ánh xạ đối tượng-tài liệu) như Mongoose, bao gồm cả các trường bắt buộc và kiểu dữ liệu. Cho AI biết nên nhúng (embed) dữ liệu liên quan hay tham chiếu (reference) nó bằng id, dựa trên cách dữ liệu sẽ được truy cập, và yêu cầu thêm chỉ mục (index) cho các trường bạn dùng để truy vấn và sắp xếp. Một mẹo hay: yêu cầu AI dùng các đối tượng truy vấn tham số hóa (parameterized query objects), nghĩa là không bao giờ xây dựng truy vấn bằng cách ghép nối văn bản thô do người dùng nhập vào. Cũng nên yêu cầu AI giải thích lựa chọn nhúng hay tham chiếu của nó. Nhờ vậy bạn sẽ hiểu được chi phí đọc, ghi và cập nhật.

// Schema validation keeps documents consistent
db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "createdAt"],
      properties: {
        email:     { bsonType: "string" },
        createdAt: { bsonType: "date" },
        roles:     { bsonType: "array", items: { bsonType: "string" } }
      }
    }
  }
});

db.users.createIndex({ email: 1 }, { unique: true });

// Aggregation: count active users per role
db.users.aggregate([
  { $match: { active: true } },
  { $unwind: "$roles" },
  { $group: { _id: "$roles", count: { $sum: 1 } } }
]);