mongodb - 使用 MongoDB 的简单投票系统

标签 mongodb

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

我的第一种方法是在艺术收藏中设置两行分别称为 upvote 和 downvote 的数字,例如 点赞:360 否决票: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 聚合函数计算文章的总分(它还可以让您稍后轻松引入加权投票,当你喜欢的时候)。

关于mongodb - 使用 MongoDB 的简单投票系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12339233/

相关文章:

c# - MongoDb .NET - ObjectId 序列化

mongodb - Docker为MongoDB ReplicaSet撰写

node.js - 允许在具有 auth 分支的 meteor 应用程序中进行集合

javascript - 单个模式数组中的多个模式引用 - Mongoose

mongodb - 多模型数据库与多个单独的数据库?

javascript - 将multer文件(nodejs)上传到Mongo数据库

arrays - MongoDB:搜索数组值时的单一结果

mongodb - 将 MongoDB Atlas 连接到 AWS 上的 Kubernetes EKS 集群

java - MongoDb - 如何使用 java 对集合中的多个字段进行排序和搜索

javascript - MongoDB javascript 查询