MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Modelowanie danych Mongo/aktualizacje do głosowania (w górę iw dół)

Wydaje się o wiele prostsze w użyciu drugiego schematu.

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

Aby uzyskać całkowitą liczbę głosów, możesz pobrać doc i usedoc.upvoters.length-doc.downvoters.length (zacznij każdy dokument od tablic upvoters i downvoters będących [ ])

Aby zarejestrować dowolny głos za użytkownika „x” na elemencie „c”, po prostu wykonaj:

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

To jest atomowe i ma tę zaletę, że robi to samo, nawet jeśli uruchomisz go 10 razy. Oszczędza to również konieczności sprawdzania, czy „x” już głosowało na „c” i w jaki sposób.

Aby zarejestrować głos przeciwny, po prostu odwróć go:

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mapowanie tablicy BsonArray na listę<> w POCO

  2. Dostęp do MongoDB z Go

  3. MongoDB C# Driver - jak przechowywać _id jako ObjectId, ale mapować na ciąg właściwości Id?

  4. Zagnieżdżona tablica aktualizacji MongoDB

  5. Ile kolekcji jest możliwych w MongoDB bez utraty wydajności?