Một phương pháp hay với MongoDB (và các kho dữ liệu không quan hệ khác) là lập mô hình dữ liệu của bạn để có thể dễ dàng sử dụng / truy vấn trong ứng dụng của bạn. Trong trường hợp của bạn, bạn có thể cân nhắc việc chuẩn hóa cấu trúc một chút và lưu trữ xếp hạng ngay trong bộ sưu tập blog, vì vậy blog có thể trông giống như sau:
{
title: "My New Post",
body: "Here's my new post. It is great. ...",
likes: 20,
dislikes: 5,
...
rates: [
{ client_id: (id of client), rate: 5 },
{ client_id: (id of another client), rate: 3 },
{ client_id: (id of a third client), rate: 10 }
]
}
Ý tưởng là các đối tượng trong rates
mảng chứa tất cả dữ liệu bạn cần để hiển thị mục nhập blog, hoàn chỉnh với xếp hạng, ngay trong tài liệu duy nhất. Nếu bạn cũng cần truy vấn tỷ lệ theo một cách khác (ví dụ:tìm tất cả các xếp hạng do người dùng X thực hiện) và trang web có nhiều người đọc, bạn có thể xem xét cũng lưu trữ dữ liệu trong một Rates
bộ sưu tập như bạn đang làm bây giờ. Chắc chắn, dữ liệu nằm ở hai nơi và khó cập nhật hơn, nhưng đó có thể là một chiến thắng chung cuộc sau khi bạn phân tích ứng dụng của mình và cách ứng dụng truy cập dữ liệu của bạn.
Lưu ý rằng bạn có thể áp dụng các chỉ mục sâu vào cấu trúc của tài liệu, vì vậy, ví dụ:bạn có thể lập chỉ mục News.rates.client_id
và sau đó bạn có thể nhanh chóng tìm thấy bất kỳ tài liệu nào trong News
bộ sưu tập mà một người dùng cụ thể đã xếp hạng.