mongodb - 在mongodb中计算百分比

标签 mongodb aggregation-framework

我的数据库看起来像:

{
  {user:bob,votes:63}
  {user:jack,votes:27}
  {user:john,votes:10}
}

我可以得到总票数,但我不知道如何让每个人的票数占总票数的百分比。例如; jack 将获得 27% 的选票。

[ 
  {
    '$group': { 
                '_id': '',
                'totalofvotes': {'$sum': '$votes'},
                '%votesperperson': {'$multiply':[{'$divide':["votes",{'$sum': '$votes'}]},100]}                   
              },
  }
]

最佳答案

你不能在单个小组赛阶段做到这一点,因为小组赛因为有总和值(value)而被终止。相反,使用以下查询:

db['test'].aggregate(
    [
        // Stage 1
        {
            $group: {
            _id:null,
            sum:{$sum:"$votes"},
            users:{$push:{user:"$user", votes:"$votes"}}
            }
        },
        // Stage 2
        {
            $unwind: {
                path : "$users",

            }
        },
        // Stage 3
        {
            $project: {user:"$users.user",
              votes:"$users.votes",
              sum:"$sum",
                "percent": {$multiply:[{$divide:["$users.votes","$sum"]},100]}
            }
        },
    ]
);

会输出

{ 
    "_id" : null, 
    "user" : "bob", 
    "votes" : NumberInt(63), 
    "sum" : NumberInt(100), 
    "percent" : 63.0
}
{ 
    "_id" : null, 
    "user" : "jack", 
    "votes" : NumberInt(27), 
    "sum" : NumberInt(100), 
    "percent" : 27.0
}
{ 
    "_id" : null, 
    "user" : "john", 
    "votes" : NumberInt(10), 
    "sum" : NumberInt(100), 
    "percent" : 10.0
}

关于mongodb - 在mongodb中计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52514384/

相关文章:

node.js - 我如何为多个集合做 Mongodb 聚合过滤器?

MongoDB在文档和子文档上匹配,使用什么作为索引?

node.js - 如何在 Node/MongoDB 中播种依赖数据

MongoDB 聚合 $or 与 $elemMatch、$expr 在 $lookup 管道内

node.js - 仅获取数组 mongoose 的最后一个元素

java - 带有 Java 驱动程序的 MongoDB 聚合

mongodb - 如何在数据库(Mongo)中进行左连接

node.js - MongoDb 插入时出现重复错误

MongoDB 读取性能差

MongoDB 聚合 : Counting distinct fields