繁体   English   中英

我如何制作这个 MongoDB 查询?

[英]How do I craft this MongoDB Query?

背景:我收集了一些高尔夫数据,并想进行一些分析。

问题

我有一个集合,其中每个文档都包含孔数和孔的总笔画。

{'_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}}
])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM