使用MongoDB的简单投票系统

使用MongoDB的简单投票系统,mongodb,Mongodb,快速问题我有一个mongodb中的文章列表,我希望用户能够对该文章投赞成票或反对票 我的第一种方法是在文章集合中有两行,分别称为upvote和downvote,它们的数字如下 投票:360 反对票:102票 然后我需要通过求和来订购这个 upvote downvote这将显示文章的全部内容 我的问题是在mongoDB中,这是做这件事的最佳方式,还是我只需投一票,然后通过那一票就可以了 谢谢你当你这样做时,你不会跟踪哪个用户已经投票,所以用户可以多次投票。那肯定不符合你的利益 出于这个原因,我会在

快速问题我有一个mongodb中的文章列表,我希望用户能够对该文章投赞成票或反对票

我的第一种方法是在文章集合中有两行,分别称为upvote和downvote,它们的数字如下 投票:360 反对票:102票

然后我需要通过求和来订购这个 upvote downvote这将显示文章的全部内容

我的问题是在mongoDB中,这是做这件事的最佳方式,还是我只需投一票,然后通过那一票就可以了


谢谢你

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

出于这个原因,我会在每篇文章中添加一个数组“投票”,其中每个投票都包含一个对象,该对象唯一地标识进行投票的用户:

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 }
    ]
当您在文章ID和vots.voter上创建唯一索引时,您已经确保没有人可以为一篇文章投票两次


当您使用“-1”表示向下投票,使用“1”表示向上投票时,您可以使用$sum聚合函数计算文章的总分(如果您愿意,也可以方便地在以后引入加权投票)。

谢谢。现在我要做的就是如何计算数组中的票数,我认为这只是一个投票数。vote.count()@Russell您仍然可以使用up:60和down:32字段作为对主要文章对象进行投票计数的快速访问方式。