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

Modellazione/aggiornamenti dei dati Mongo per la votazione (su e giù)

Sembra molto più semplice utilizzare il secondo schema.

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

Per ottenere i voti totali puoi ottenere doc e usedoc.upvoters.length-doc.downvoters.length (inizia ogni documento con gli array di voti positivi e negativi che sono [ ])

Per registrare qualsiasi voto positivo dell'utente "x" sull'elemento "c" basta fare:

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

Questo è atomico e ha il vantaggio di fare la stessa cosa anche se lo esegui 10 volte. Ti evita anche di dover controllare se "x" ha già votato per "c" e in che modo.

Per registrare il downvote è sufficiente invertirlo:

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