MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

système de vote simple avec MongoDB

Lorsque vous le feriez de cette façon, vous ne sauriez pas quel utilisateur a déjà voté, de sorte que les utilisateurs peuvent voter plusieurs fois. Ce n'est sûrement pas dans votre intérêt.

Pour cette raison, j'ajouterais un tableau "votes" à chaque article qui comprend un objet pour chaque vote qui identifie de manière unique l'utilisateur qui l'a fait :

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

Lorsque vous créez un index unique sur l'ID d'article et votes.voter, vous vous êtes déjà assuré que personne ne peut voter deux fois pour un article.

Lorsque vous utilisez une valeur de "-1" pour downvote et "1" pour upvote, vous pouvez calculer le score total d'un article en utilisant la fonction d'agrégation $sum (cela vous permettrait également d'introduire facilement des votes pondérés plus tard, lorsque vous vous sentirez j'aime).