Zdá se, že použití druhého schématu je mnohem jednodušší.
Document: { name: "name",
upvoters: [name1, name2, etc],
downvoters: [name1, name2, etc],
}
Chcete-li získat celkový počet hlasů, můžete získat dokument a usedoc.upvoters.length-doc.downvoters.length (každý dokument začněte s poli upvoters a downvoters [ ])
Chcete-li zaznamenat jakýkoli souhlas uživatele "x" na položce "c", postupujte takto:
db.votes.update({name:"c"},{$addToSet:{upvotes:"x"},$pull:{downvotes:"x"}})
Toto je atomové a má výhodu v tom, že dělá to samé, i když to spustíte 10krát. Také vás to ušetří od nutnosti kontrolovat, zda „x“ již hlasovalo pro „c“ a jakým způsobem.
Chcete-li zaznamenat hlas proti, stačí jej obrátit:
db.votes.update({name:"c"},{$addToSet:{downvotes:"x"},$pull:{upvotes:"x"}})