快速问题我在mongodb中有一份文章清单,我希望用户能够对艺术品进行投票或投票。
我的第一种方式是在艺术收藏中有两行叫做upvote和downvote他们会有数字像 给予好评:360 downvote:102;
然后我需要通过总结来订购 upvote-downvote这将显示艺术的总喜欢。
我的问题是在mongoDB中这是最好的方法,或者我最好用一个“投票”,然后通过投票来订购它。
谢谢
答案 0 :(得分: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上创建唯一索引时,您已经确保没有人可以为文章投票两次。
当你使用值“-1”表示downvote而“1”表示upvote时你可以使用$ sum聚合函数计算一篇文章的总分(这也很容易让你以后引入加权投票,当你想要的时候。)