Nói chung, việc nhúng các mối quan hệ theo sau / theo sau vào tài liệu của người dùng là một ý tưởng tồi, vì một số lý do:
(1) có giới hạn kích thước tài liệu tối đa là 16MB và thật hợp lý khi một người dùng phổ biến của một trang web được đăng ký tốt có thể có hàng trăm nghìn người theo dõi, điều này sẽ đạt đến kích thước tài liệu tối đa,
(2) các mối quan hệ về người theo dõi thay đổi thường xuyên, và do đó, trường hợp người dùng có được nhiều người theo dõi sẽ dẫn đến sự tăng trưởng tài liệu lặp lại nếu bạn đang nhúng người theo dõi. Việc phát triển tài liệu thường xuyên sẽ cản trở đáng kể hiệu suất của MongoDB và do đó nên tránh (việc tăng tài liệu không thường xuyên, đặc biệt là tài liệu có xu hướng đạt đến kích thước cuối cùng ổn định, ít bị phạt về hiệu suất).
Vì vậy, có, tốt nhất là tách mối quan hệ theo sau / theo sau thành một tập hợp các bản ghi riêng biệt, mỗi bản ghi có hai trường, ví dụ:{_id:, oid:}, với các chỉ mục trên _id (cho "tôi đang theo dõi ai? "truy vấn) và oid (đối với truy vấn" ai đang theo dõi tôi? "). Mọi thay đổi trạng thái riêng lẻ đều được mô hình hóa bằng một lần thêm hoặc xóa tài liệu, mặc dù nếu bạn cũng hiển thị những thứ như số lượng người theo dõi, bạn có thể nên giữ các bộ đếm riêng biệt mà bạn cập nhật sau bất kỳ lần chèn / xóa cạnh nào.
(Tất nhiên, điều này giả sử các yêu cầu kinh doanh của bạn cho phép bạn linh hoạt về các chi tiết nhất quán:nói chung, nếu mã hiển thị của bạn cho người dùng biết rằng anh ta có 304 người theo dõi và sau đó tiến hành thống kê họ, chỉ người dùng cầu kỳ nhất mới kiểm tra xem những người theo dõi đã được liệt kê hay chưa kiểm đếm lên đến 304. Nếu các yêu cầu kinh doanh đòi hỏi sự nhất quán tuyệt đối, bạn sẽ cần một cơ sở dữ liệu cô lập các giao dịch cho bạn hoặc nếu không, bạn sẽ phải tự mình kiểm đếm như một phần của việc hiển thị tất cả danh tính người dùng.)