MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongo моделиране на данни/актуализации за гласуване (нагоре и надолу)

Изглежда много по-лесно да се използва втората схема.

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

За да получите общ брой гласове, можете да получите документа и useddoc.upvoters.length-doc.downvoters.length(започнете всеки документ с масиви за гласували за и против гласували [ ])

За да запишете всяко гласуване „за“ от потребител „x“ за елемент „c“, просто направете:

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

Това е атомарно и има предимството да прави едно и също нещо, дори ако го стартирате 10 пъти. Освен това ви спестява необходимостта да проверявате дали „x“ вече е гласувал за „c“ и по какъв начин.

За да запишете глас против, просто го обърнете:

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. Монго филтър масив от масив от масив

  2. Незадължителни параметри на заявката за търсене Mongoose?

  3. Имате ли нужда от JPA, когато използвате MongoDB?

  4. различен с множество полета и с условие where в mongodb

  5. 5 начина да получите минути от среща в MongoDB