MongoDB的简单投票系统

Rus*_*wer 5 mongodb

快速问题我有一份mongodb的艺术品清单,我希望用户能够对艺术品进行投票或投票.

我的第一种方式是在艺术收藏中有两行叫做upvote和downvote他们会有像upvote这样的数字:360 downvote:102;

然后我需要通过做一个总结upvote-downvote命令这将显示艺术的总喜欢.

我的问题是在mongoDB这是最好的方式,或者我最好用一个"投票",然后只是通过投票订购.

谢谢

Phi*_*ipp 7

当你这样做时,你不会跟踪哪个用户已经投票,因此用户可以多次投票.这肯定不符合你的利益.

出于这个原因,我会在每篇文章中添加一个数组"投票",其中包含每个投票的对象,该投票唯一地标识了制作它的用户:

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 }
    ]
Run Code Online (Sandbox Code Playgroud)

当您在文章ID和votes.voter上创建唯一索引时,您已经确保没有人可以为文章投票两次.

当你使用值为"-1"表示downvote而"1"表示upvote时,你可以使用$ sum聚合函数计算一篇文章的总分(当你感觉以后,你也可以轻松地引入加权投票)喜欢它).