Cho phép nói rằng tôi có một trang web như digg.com Tôi đã có một loạt bài viết và mọi người có thể bỏ phiếu cho các bài viết họ thích.MongoDB Schema Design - Biểu quyết về bài viết
Tôi muốn có thể truy vấn để nhận các bài viết có nhiều phiếu nhất trong một thời gian nhất định (giờ trước, ngày cuối cùng, tuần trước) được sắp xếp theo số phiếu bầu.
Như thường lệ với MongoDB, có một số cách khác nhau để thực hiện điều này, nhưng tôi không chắc là cái nào là đúng.
- Một tài liệu viết, trong đó có một mảng của Votes - số phiếu bầu chính họ là tài liệu có chứa userid, tên người dùng và ngày bỏ phiếu:
{
"_id": "ObjectId(xxxx)",
"title": "Post Title",
"postdate": "21/02/2012+1345",
"summary": "Summary of Article",
"Votes": [
{
"userid":ObjectId(xxxx),
"username": "Joe Smith",
"votedate": "03/03/2012+1436"
},
]
}
- Một bộ sưu tập phiếu riêng biệt, chứa thông tin chi tiết của một cá nhân bỏ phiếu và tham chiếu đến bài đăng đã được bỏ phiếu trên:
{
"_id": "ObjectId(xxxx)",
"postId": ObjectId(xxxx),
"userId": ObjectId(xxxx),
"votedate": "03/03/2012+1436"
}
Tài liệu đầu tiên là Documentey nhiều hơn nhưng tôi không biết cách truy vấn mảng phiếu để nhận các tài liệu có nhiều phiếu bầu nhất trong 24 giờ qua.
Tôi đang nghiêng về phía thứ hai vì sẽ dễ dàng hơn để truy vấn số phiếu bầu được nhóm theo phiếu tôi nghĩ, nhưng tôi không chắc nó sẽ hoạt động tốt như thế nào. Đây là cách bạn muốn làm điều đó trong Cơ sở dữ liệu quan hệ, nhưng nó không có vẻ rất tài liệu - nhưng tôi không chắc chắn nếu nó là một vấn đề, phải không?
Hoặc tôi có sử dụng kết hợp cả hai không? Ngoài ra, tôi sẽ làm loại truy vấn tổng hợp này trong thời gian thực, mỗi lần tải trang. Hay tôi chỉ chạy truy vấn nói một lần mỗi phút và lưu trữ kết quả trong bộ sưu tập kết quả truy vấn?
Bạn sẽ triển khai giản đồ này như thế nào?
câu hỏi liên quan: http://stackoverflow.com/questions/ 9296793/hiệu quả-document-format-to-store-phiếu-trong-mongo-db –
Cũng liên quan: http://stackoverflow.com/questions/7046462/best-way-to-model-a-voting-system-in -mongodb – wmassingham