2012-09-09 61 views
5

快速问题我有一个MongoDB中的articals列表,我希望用户能够upvote或投票的艺术。简单的投票系统与MongoDB

我的第一种方式是在artical集合中有两行,分别称为upvote和downvote,他们会有数字,如 downvote:102;

然后,我需要通过做一个总和来订购 upvote-downvote这将显示artical的总喜欢。

我的问题是在mongoDB中,这是做这件事的最好方法,还是我最好用一个“投票”,然后按照该投票排序。

谢谢

回答

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

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

当您对downvote使用值“-1”并对upvote使用“1”时,您可以使用$ sum聚合函数计算文章的总分数(它也可以轻松地让您稍后介绍加权投票,当你感觉像)。

+0

谢谢。现在我需要解决的是我如何计算该数组中的选票,我认为它只是一个votes.vote.count(); – RussellHarrower

+1

@Russell你仍然可以:60和下:32个字段作为一个快速访问的方式来投票主要文章对象计数。 – halil