快速提问 我在 mongodb 中有一个文章列表,我希望用户能够对文章投赞成票或反对票。
我的第一种方法是在艺术收藏中有两行称为 upvote 和 downvote 他们会有像 upvote:360 downvote:102 这样的数字;
然后我需要通过汇总 upvote-downvote 来订购它,这将显示艺术作品的总喜欢。
我的问题是在 mongoDB 中这是最好的方法,还是我最好用一个“投票”然后通过投票来订购它。
谢谢你
快速提问 我在 mongodb 中有一个文章列表,我希望用户能够对文章投赞成票或反对票。
我的第一种方法是在艺术收藏中有两行称为 upvote 和 downvote 他们会有像 upvote:360 downvote:102 这样的数字;
然后我需要通过汇总 upvote-downvote 来订购它,这将显示艺术作品的总喜欢。
我的问题是在 mongoDB 中这是最好的方法,还是我最好用一个“投票”然后通过投票来订购它。
谢谢你
当您这样做时,您不会跟踪哪个用户已经投票,因此用户可以多次投票。那肯定不符合你的利益。
出于这个原因,我会在每篇文章中添加一个数组“votes”,其中包含每个投票的对象,该对象唯一地标识出投票的用户:
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”值表示反对票和“1”值表示赞成票时,您可以使用 $sum 聚合函数计算一篇文章的总分(它还可以让您稍后轻松引入加权投票,当您觉得喜欢它)。