python - 如何制作这个 MongoDB 查询?
问题描述
背景:我收集了一些高尔夫数据,并希望进行一些分析。
问题:
我有一个集合,其中每个文档都包含孔的编号和孔的总行程。
{'_id': ObjectId('5f8db03cba60405c610878d8'), 'scorecardDetails': [{'scorecard': {'holes': [{'number': 1, 'strokes': 4}, {'number': 2, 'strokes': 4}, {'number': 3, 'strokes': 3}, {'number': 4, 'strokes': 5}, {'number': 5, 'strokes': 3}, {'number': 6, 'strokes': 3}, {'number': 7, 'strokes': 5}, {'number': 8, 'strokes': 7}, {'number': 9, 'strokes': 5}, {'number': 10, 'strokes': 5}, {'number': 11, 'strokes': 3}, {'number': 12, 'strokes': 4}, {'number': 13, 'strokes': 3}, {'number': 14, 'strokes': 3}, {'number': 15, 'strokes': 6}, {'number': 16, 'strokes': 4}, {'number': 17, 'strokes': 4}, {'number': 18, 'strokes': 3}]}}]}
如何找到每个孔号的总行程平均值?我的最终输出应该是这样的:
{'_id': ObjectId('5f8db03cba60405c610878d8'), 'scorecardDetails': [{'scorecard': {'holes': [{'number': 1, 'strokes': 4.1}, {'number': 2, 'strokes': 4.2}, {'number': 3, 'strokes': 3.1}, {'number': 4, 'strokes': 5.1}, ... ]}}]}
解决方案
使用聚合函数,$unwind 将数组项一一展开,$group 按孔号组合它们。您的数据结构包含 2 级数组,因此需要 $unwind 两次。
就是这样
db.getCollection('test').aggregate([
{$unwind: "$scorecardDetails"},
{$unwind: "$scorecardDetails.scorecard.holes"},
{$group: {
_id: "$scorecardDetails.scorecard.holes.number",
average: {
$avg: "$scorecardDetails.scorecard.holes.strokes"
},
}} ,
{'$sort': {"_id": 1}}
])
推荐阅读
- python - VSCode/Pylint 在同一目录中找不到模块
- python - 如何为这段代码制作嵌套循环?
- r - 在 R 中,如何根据转换表将多个值映射到不同的值?
- f# - F#: [
] vs 覆盖 __.ToString()。¿ 怎么了? - delphi - delphi中的搜索自动化?
- python - 如何解决 Django 查询“'ExtractHour' 对象没有属性 'split'”错误?
- ios - 颤振 -
使用 google_sign_in 库时未找到 - r - 嵌套小标题,执行操作,以不同的形式取消嵌套和嵌套数据
- ionic-framework - 如何从 Firestore 集合创建一个 ion-reorder-group
- java - 如何以 .war 和 .jar 的形式构建/运行 maven 项目?