sql >> Database >  >> NoSQL >> MongoDB

Mongo datamodellering/updates voor stemmen (omhoog en omlaag)

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"}})


  1. MongoDB Java API:verschil tussen com.mongodb.DBCollection.Save() en com.mongodb.DBCollection.Insert()?

  2. MongoDB - Meerdere $ of bewerkingen

  3. redis vs hazelcast

  4. MongoDB haalt alleen overeenkomende subdocumenten op uit een document met c#