使用Pymongo项目计算百分比并且devide返回None

时间:2017-03-26 10:43:44

标签: python project aggregation-framework pymongo

我正在学习Python - 所以这对你来说可能是一个非常简单的问题。 但是,我在浏览时没有找到解决方案,所以我希望在这里找到帮助;)

我想获得条件> = 5的行数百分比。

  • 第一个查询成功返回符合条件的行数(例如400)
  • 第二个成功返回总数(例如2000)。
  • 第三个($ project)总是按预期返回“无”而不是0.2

我真的很感激任何帮助。 谢谢!

def get_percentage(collection):

    coll = collection.aggregate([
        #get No of rows with Condition>=5
        {"$match": { "Condition": {"$gte":5} }},
        {"$group": {"_id": 0, "count": {"$sum":1}}}
        ,
        #get total No of rows
        {"$group": {"_id": 0, "total": {"$sum":1}}}
        ,
        #get percentage: count/total
        {"$project" : {"percentage" : {"$divide" : ["$count","$total"]}}}
    ])

    for dot in coll:
        print(dot['percentage'])
        percentage = dot['percentage']
    return percentage 

1 个答案:

答案 0 :(得分:0)

使用$cond计算Condition >= 5的行数。下面的语句是用javascript编写的。你需要在python中引用键。

collection.aggregate([{
    $project: {count: {$cond: {if: {$gte: ['$Condition', 5]}, then: 1, else: 0}}}
}, {
    $group: {_id: 0, count: {$sum: '$count'}, total: {$sum: 1}}
}, {
    $project: {"percentage" : {"$divide" : ["$count","$total"]}}
}])