sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongo datamodellering/opdateringer til afstemning (op og ned)

Det virker meget enklere at bruge det andet skema.

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

For at få det samlede antal stemmer kan du hente dokumentet og usedoc.upvoters.length-doc.downvoters.length(start hvert dokument med op- og nedvælger-arrays som [ ])

For at optage en opstemme fra bruger "x" på punkt "c" skal du blot gøre:

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

Dette er atomært, og det har fordelen ved at gøre det samme, selvom du kører det 10 gange. Det sparer dig også for at skulle tjekke, om "x" allerede har stemt for "c", og hvilken vej.

For at optage nedstemning skal du bare vende det:

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


  1. Konverter MongoDB-felt fra String til ISODate i array

  2. Sådan gemmer du store tal i MongoDB med Node.js

  3. Hvordan kan jeg sortere i, at nuller sidst er bestilt i mongodb?

  4. MongoDB/JS - Avanceret facetteret søgning - Sådan får du kun relevante kategorier/værdier