Gdy zrobisz to w ten sposób, nie będziesz śledzić, który użytkownik już głosował, więc użytkownicy mogą głosować wiele razy. To z pewnością nie leży w twoim interesie.
Z tego powodu dodałbym tablicę "głosów" do każdego artykułu, która zawiera obiekt dla każdego głosu, który jednoznacznie identyfikuje użytkownika, który go wykonał:
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 }
]
Tworząc unikalny indeks nad identyfikatorem artykułu i vote.voter, masz już pewność, że nikt nie będzie mógł dwukrotnie głosować na artykuł.
Kiedy użyjesz wartości "-1" dla downvote i "1" dla upvote, możesz obliczyć całkowity wynik artykułu za pomocą funkcji agregującej $sum (umożliwiłoby to również późniejsze wprowadzenie głosów ważonych, gdy czujesz lubię to).