sql >> Database >  >> NoSQL >> MongoDB

eenvoudig stemsysteem met MongoDB

Als je het op die manier zou doen, zou je niet bijhouden welke gebruiker al heeft gestemd, zodat gebruikers meerdere keren kunnen stemmen. Dat is vast niet in uw belang.

Om die reden zou ik aan elk artikel een array "votes" toevoegen die een object voor elke stem bevat die de gebruiker die het heeft gemaakt op unieke wijze identificeert:

votes: [ 
        { voter:"name or ID or IP address or some other unique identifier for the person who voted",
          vote:-1 },
        { voter:"someone else",
          vote:1 },
        { voter:"and someone entirely different",
          vote:-1 }
    ]

Wanneer je een unieke index maakt over de artikel-ID en stemmen.voter, heb je er al voor gezorgd dat niemand twee keer op een artikel kan stemmen.

Wanneer u een waarde van "-1" voor downvote en "1" voor upvote gebruikt, kunt u de totale score van een artikel berekenen met behulp van de $sum-aggregatiefunctie (u kunt later ook gemakkelijk gewogen stemmen invoeren, wanneer u vind het leuk).




  1. gebruik node-redis met node 8 util.promisify

  2. mongodb mongoTemplate krijgt een apart veld met enkele criteria

  3. Mongo $in met samengestelde index

  4. alternatief voor het gebruik van 'wait' met lazy_static! macro roest?