mongodb - MongoDB (pymongo) $avg 和 $stdDevPop 在 $project 中不起作用,但它们在 $group 中完美运行
问题描述
我试图在集合中找到平均值($avg
)和标准偏差($stdDevPop
),检查平均值是否大于标准偏差值,并根据此值使用较大的值作为optimalCredit
值。
如果我使用$avg
and $stdDevPop
inside $group
,它们可以正常工作,但是,当我将它们放入 a$project
时,它们会返回Null
我对 Mongo 真的很陌生(昨天早上我做了第一个查询)所以我知道我必须理解错误。
这是我用来比较平均值 ( $avg
) 和标准偏差 ( $stdDevPop
) 的代码:
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'count':
{'$sum': 1}
}
},
{'$project':
{'optimalCredit':
{'$cond':
{'if':
{'$gt': [
{'$avg': 'credit'},
{'$stdDevPop': 'credit'}
]
},
'then':
{'$avg': '$credit'},
'else':
{'$stdDevPop': '$credit'}
}
}
}
},
{'$sort':
{'optimalCredit': -1}
}
这是我测试的代码,用于查看是否有效$avg
并$stdDevPop
返回数据:
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0},
}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'creditAvg':
{'$avg': '$credit'},
'creditStdDev':
{'$stdDevPop':'$credit'},
'count': {'$sum': 1}
}
}
这是我在使用时得到的$project
:
{'_id': {'parNr': 7, 'charRange': 1500}, 'optimalCredit': None}
$project
如果我删除并移动$avg
并进入,这就是我得到$stdDevPop
的$group
:
{'_id': {'charRange': 1500, 'parNr': 7}, 'creditStdDev': 19.430788855719562, 'count': 9, 'creditAvg': 16.0}
最后,这是它应该看起来的样子(使用上面的数字):
{'_id': {'parNr': 7, 'charRange': 1500}, 'count': 9, 'optimalCredit': 19.430788855719562}
解决方案
我得到了它。我需要在 中声明平均值 ( $avg
) 和标准差 ( $stdDevPop
),$group
然后从$project
{'$match':
{'charRange':
{'$gt': 0},
'countPar':
{'$gte': 0}
},
{'$group':
{'_id':
{'charRange': '$charRange', 'parNr': '$countPar'},
'count': {'$sum': 1},
'creditAvg': {'$avg': '$credit'},
'creditStdDev': {'$stdDevPop': '$credit'}
}
},
{'$project':
{'count': '$count',
'creditAvg': '$creditAvg',
'creditStdDev': '$creditStdDev',
'optimalCredit':
{'$cond':
{'if':
{'$gt': [
'$creditAvg',
'$creditStdDev'
]
},
'then': '$creditAvg',
'else': '$creditStdDev'
}
}
}
},
{'$sort':
{'optimalCredit': -1}
}
推荐阅读
- python - 通过将列表元素转换为行和列,将列表转换为数据框 python
- google-cloud-platform - 知识图搜索 API 中缺少图像数据
- javascript - app.post 在 REACT JS 的 Firebase 数据库中不起作用(错误“=>”)
- spring-boot - Spring Boot 2.3.5 | 使用 gradle 将 jar 发布到本地 maven 存储库不起作用
- python - TypeError: 不支持的操作数类型 -: 'str' 和 'datetime.timedelta' 在 Dash 导入时
- android - 在 jsoup 上获取文本?
- python - 获取 .exe 与 .txt 交互
- sql-server - 删除日志文件夹后,mssql2019 服务也将无法启动
- sorting - 如何在 ViewModel 中对 LiveData 进行排序
- angularjs - 我无法使用 angularjs 和 spring boot mvc 连接到数据库