Het lijkt veel eenvoudiger om het tweede schema te gebruiken.
Document: { name: "name",
upvoters: [name1, name2, etc],
downvoters: [name1, name2, etc],
}
Om het totale aantal stemmen te krijgen, kunt u het document en usedoc.upvoters.length-doc.downvoters.length (begin elk document met de arrays van upvoters en downvoters [ ]) ophalen
Om een eventuele upvote van gebruiker "x" op item "c" op te nemen, doet u gewoon:
db.votes.update({name:"c"},{$addToSet:{upvotes:"x"},$pull:{downvotes:"x"}})
Dit is atomair en het heeft het voordeel dat je hetzelfde doet, zelfs als je het 10 keer uitvoert. Het voorkomt ook dat je hoeft te controleren of "x" al op "c" heeft gestemd en op welke manier.
Om downvote op te nemen, draait u het gewoon om:
db.votes.update({name:"c"},{$addToSet:{downvotes:"x"},$pull:{upvotes:"x"}})