sql >> Databáze >  >> NoSQL >> MongoDB

Mongo datové modelování/aktualizace pro hlasování (nahoru a dolů)

Zdá se, že použití druhého schématu je mnohem jednodušší.

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

Chcete-li získat celkový počet hlasů, můžete získat dokument a usedoc.upvoters.length-doc.downvoters.length (každý dokument začněte s poli upvoters a downvoters [ ])

Chcete-li zaznamenat jakýkoli souhlas uživatele "x" na položce "c", postupujte takto:

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

Toto je atomové a má výhodu v tom, že dělá to samé, i když to spustíte 10krát. Také vás to ušetří od nutnosti kontrolovat, zda „x“ již hlasovalo pro „c“ a jakým způsobem.

Chcete-li zaznamenat hlas proti, stačí jej obrátit:

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


  1. Jak obnovím MongoDB ChangeStream při prvním dokumentu a nejen změny poté, co začnu poslouchat

  2. Node.js se nedaří připojit k MongoDB

  3. mongodb připojit pomocí php

  4. MongoDB - obrovské množství vláken MongoCleaner