2012-09-09 12 views
5

domanda veloce Ho una lista di articoli in mongodb e voglio che gli utenti siano in grado di alzare il limite o votare l'articolo.sistema di voto semplice con MongoDB

Il mio primo modo sarebbe nella raccolta articolare di avere due righe chiamate upvote e downvote avrebbero numeri come upvote: 360 downvote: 102;

quindi avrei bisogno di ordinare questo facendo una somma pari a -varo in basso questo mostrerebbe il numero totale di Mi piace dell'articolazione.

La mia domanda è nel mongoDB è questo il modo migliore per farlo o sto meglio con un "voto" e poi basta ordinarlo con quel voto.

Thank You

risposta

7

Quando volete fare in questo modo, non si traccia che l'utente ha già votato, così gli utenti possono votare più volte. Questo sicuramente non è nel tuo interesse.

Per questo motivo vorrei aggiungere un array "utili" per ogni articolo che include un oggetto per ogni voto che identifica univocamente 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 si crea un indice univoco sopra l'articolo ID e voti.voter, hai già assicurato che nessuno possa votare due volte per un articolo.

Quando si utilizza un valore di "-1" per downvote e "1" per upvote è possibile calcolare il punteggio totale di un articolo utilizzando la funzione di aggregazione $ sum (Si consentirebbe anche facilmente di introdurre voti ponderati in seguito , quando ne hai voglia).

+0

grazie. ora tutto quello che devo capire è come conto i voti in quell'array che prendo sarebbe un voto.vote.count(); – RussellHarrower

+1

@Russell si può ancora avere up: 60 & down: 32 campi come un modo rapido accessibile per votare contare sull'oggetto dell'articolo principale. – halil

Problemi correlati