MongoDB có hai cách mô hình quan hệ giữa dữ liệu:
Embedding (nhúng): đặt dữ liệu con bên trong document cha (mảng/object lồng).
- Ưu: đọc tất cả trong một lần truy vấn, không cần join; ghi nguyên tử ở cấp một document.
- Hợp: quan hệ 1–1 hoặc 1–ít, dữ liệu con luôn được đọc kèm cha, ít đổi (địa chỉ, dòng đơn hàng).
- Nhược: document tăng kích thước dần (chạm giới hạn 16MB), dữ liệu con lặp lại khó cập nhật đồng bộ.
Referencing (tham chiếu): lưu _id của document khác rồi truy vấn/$lookup khi cần (giống FK).
- Hợp: quan hệ 1–nhiều lớn hoặc nhiều–nhiều, dữ liệu con lớn/độc lập/đổi thường xuyên, được chia sẻ giữa nhiều cha.
- Nhược: cần nhiều truy vấn hoặc $lookup.
Nguyên tắc: "dữ liệu đọc cùng nhau thì lưu cùng nhau". Mặc định ưu tiên embed cho quan hệ nhỏ/đọc-kèm; reference khi dữ liệu lớn, dùng lại, hoặc quan hệ nhiều-nhiều. Hai pattern bổ trợ: bucket (gom time-series theo khoảng thời gian thay vì mỗi lần đo một document) và outlier (tách riêng trường hợp ngoại lệ cực lớn, vd bài viết triệu like).