MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo-Datenmodellierung/Updates für Abstimmungen (auf und ab)

Scheint viel einfacher zu sein, das zweite Schema zu verwenden.

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

Um die Gesamtstimmen zu erhalten, können Sie das doc und usedoc.upvoters.length-doc.downvoters.length abrufen (beginnen Sie jedes Dokument mit Upvoters- und Downvoters-Arrays, die [ ] sind)

Um eine positive Bewertung von Benutzer „x“ zu Punkt „c“ aufzuzeichnen, tun Sie einfach Folgendes:

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

Dies ist atomar und hat den Vorteil, dass es dasselbe tut, selbst wenn Sie es 10 Mal ausführen. Es erspart Ihnen auch, zu prüfen, ob "x" bereits für "c" gestimmt hat und auf welche Weise.

Um eine Ablehnung aufzuzeichnen, kehren Sie sie einfach um:

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