簡體   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