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

Modelado/actualizaciones de datos de Mongo para votar (arriba y abajo)

Parece mucho más simple usar el segundo esquema.

Document:  { name: "name",
             upvoters: [name1, name2, etc],
             downvoters: [name1, name2, etc],
           }

Para obtener el total de votos, puede obtener el doc y usedoc.upvoters.length-doc.downvoters.length (comience cada documento con matrices de votantes positivos y negativos como [ ])

Para registrar cualquier voto a favor del usuario "x" en el elemento "c", simplemente haga lo siguiente:

db.votes.update({name:"c"},{$addToSet:{upvotes:"x"},$pull:{downvotes:"x"}})

Esto es atómico y tiene la ventaja de hacer lo mismo incluso si lo ejecuta 10 veces. También le evita tener que verificar si "x" ya votó por "c" y de qué manera.

Para registrar un voto negativo, inviértalo:

db.votes.update({name:"c"},{$addToSet:{downvotes:"x"},$pull:{upvotes:"x"}})