MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

semplice sistema di voto con MongoDB

Quando lo faresti in questo modo, non terresti traccia di quale utente ha già votato, quindi gli utenti possono votare più volte. Sicuramente non è nel tuo interesse.

Per questo motivo aggiungerei un array "votes" a ogni articolo che include un oggetto per ogni voto che identifica in modo univoco l'utente che lo ha fatto:

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 }
    ]

Quando crei un indice univoco sull'ID articolo e su vote.voter, ti sei già assicurato che nessuno possa votare due volte per un articolo.

Quando utilizzi un valore di "-1" per il voto negativo e "1" per il voto positivo, puoi calcolare il punteggio totale di un articolo utilizzando la funzione di aggregazione $sum (ti permetterebbe anche facilmente di introdurre voti ponderati in un secondo momento, quando ritieni piace).