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

Modélisation des données Mongo/mises à jour pour le vote (haut et bas)

Semble beaucoup plus simple d'utiliser le deuxième schéma.

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

Pour obtenir le nombre total de votes, vous pouvez obtenir le doc et useoc.upvoters.length-doc.downvoters.length (démarrez chaque document avec les tableaux upvoters et downvoters étant [ ])

Pour enregistrer tout vote positif de l'utilisateur "x" sur l'élément "c", faites simplement :

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

C'est atomique et ça a l'avantage de faire la même chose même si vous l'exécutez 10 fois. Cela vous évite aussi d'avoir à vérifier si "x" a déjà voté pour "c" et dans quel sens.

Pour enregistrer un vote négatif, il suffit de l'inverser :

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