Python 我如何设计这个MongoDB查询?

Python 我如何设计这个MongoDB查询?,python,mongodb,Python,Mongodb,上下文:我收集了一些高尔夫数据,希望进行一些分析 问题: 我有一个集合,其中每个文档都包含孔编号和孔的总笔划 {'_id': ObjectId('5f8db03cba60405c610878d8'), 'scorecardDetails': [{'scorecard': {'holes': [{'number': 1, 'strokes': 4}, {'number': 2, 'strokes': 4}, {'number': 3, 'strokes': 3}, {'number': 4, 's

上下文:我收集了一些高尔夫数据,希望进行一些分析

问题

我有一个集合,其中每个文档都包含孔编号和孔的总笔划

{'_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”,
平均值:{
$avg:“$scorecardDetails.scorecard.holes.strokes”
}, 
}} , 
{'$sort':{u id:1}
])

谢谢德里克对格式的编辑,你比我快!您需要使用聚合查询。查询中可以使用的一些聚合阶段/运算符有:
$unwind
$group
$avg
。首先,谢谢Prasad,我尝试了$group和$avg,但没有尝试$unwind。我会看一看。我想你需要在分组(和平均)之前解开数组。