sql >> Base de Datos >  >> NoSQL >> MongoDB

sistema de votación simple con MongoDB

Cuando lo haría de esa manera, no rastrearía qué usuario ya votó, por lo que los usuarios pueden votar varias veces. Seguramente eso no es de su interés.

Por esa razón, agregaría una matriz "votos" a cada artículo que incluya un objeto para cada voto que identifique de manera única al usuario que lo hizo:

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

Cuando crea un índice único sobre el ID del artículo y votes.voter, ya se ha asegurado de que nadie pueda votar dos veces por un artículo.

Cuando utiliza un valor de "-1" para el voto a favor y "1" para el voto a favor, puede calcular la puntuación total de un artículo mediante la función agregada $sum (también le permitiría introducir votos ponderados más adelante, cuando lo considere oportuno). me gusta).