MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

einfaches Abstimmungssystem mit MongoDB

Wenn Sie dies auf diese Weise tun würden, würden Sie nicht nachverfolgen, welcher Benutzer bereits abgestimmt hat, sodass Benutzer mehrmals abstimmen können. Das ist sicher nicht in Ihrem Interesse.

Aus diesem Grund würde ich jedem Artikel ein Array "Stimmen" hinzufügen, das ein Objekt für jede Stimme enthält, das den Benutzer, der sie abgegeben hat, eindeutig identifiziert:

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 }
    ]

Wenn Sie einen eindeutigen Index über die Artikel-ID und votes.voter erstellen, haben Sie bereits dafür gesorgt, dass niemand zweimal für einen Artikel stimmen kann.

Wenn Sie einen Wert von "-1" für negative und "1" für positive Stimmen verwenden, können Sie die Gesamtpunktzahl eines Artikels berechnen, indem Sie die $sum-Aggregatfunktion verwenden (Sie würde es Ihnen auch leicht ermöglichen, später gewichtete Stimmen einzuführen, wenn Sie das Gefühl haben mag es).