MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

sistema de votação simples com MongoDB


Quando você fizer isso dessa maneira, não acompanhará qual usuário já votou, para que os usuários possam votar várias vezes. Isso certamente não é do seu interesse.

Por esse motivo, eu adicionaria um array "votes" a cada artigo que inclui um objeto para cada voto que identifica exclusivamente o usuário que o fez:
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 }
    ]

Ao criar um índice exclusivo sobre o ID do artigo e o votes.voter, você já garantiu que ninguém pode votar duas vezes em um artigo.

Quando você usa um valor de "-1" para downvote e "1" para upvote você pode calcular a pontuação total de um artigo usando a função de agregação $sum (Ela também permitiria que você introduzisse votos ponderados mais tarde, quando você sentir que gosto disso).