Khi bạn làm theo cách đó, bạn sẽ không theo dõi người dùng nào đã bỏ phiếu, vì vậy người dùng có thể bỏ phiếu nhiều lần. Điều đó chắc chắn không có lợi cho bạn.
Vì lý do đó, tôi sẽ thêm một mảng "phiếu bầu" vào mỗi bài viết bao gồm một đối tượng cho mỗi phiếu bầu xác định duy nhất người dùng đã thực hiện nó:
votes: [
{ voter:"name or ID or IP address or some other unique identifier for the person who voted",
vote:-1 },
{ voter:"someone else",
vote:1 },
{ voter:"and someone entirely different",
vote:-1 }
]
Khi bạn tạo một chỉ mục duy nhất trên ID bài viết và votes.voter, bạn đã đảm bảo rằng không ai có thể bỏ phiếu hai lần cho một bài viết.
Khi bạn sử dụng giá trị "-1" cho downvote và "1" cho upvote, bạn có thể tính tổng điểm của một bài viết bằng cách sử dụng hàm tổng hợp $ sum (Nó cũng sẽ dễ dàng cho phép bạn giới thiệu các phiếu bầu có trọng số sau này, khi bạn cảm thấy thích nó).