sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo datamodellering/uppdateringar för röstning (upp och ner)

Verkar mycket enklare att använda det andra schemat.

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

För att få totalt antal röster kan du hämta dokumentet och usedoc.upvoters.length-doc.downvoters.length(börja varje dokument med upp- och nedväljare som är [ ])

För att spela in en uppröstning av användare "x" på objekt "c" gör bara:

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

Det här är atomärt och det har fördelen att göra samma sak även om du kör det 10 gånger. Det besparar dig också från att behöva kontrollera om "x" redan har röstat för "c" och på vilket sätt.

För att spela in nedröstning, vänd bara om det:

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


  1. MongoDb finns per kolumn

  2. MongoDB:Kan inte ansluta till ny replikuppsättningsmaster

  3. Kan en $text-sökning utföra en partiell matchning

  4. Mongoose Populera bas på ett annat fält Dynamisk ref