2016-06-24 114 views
2

我收集的那個集合字段是狀態。狀態是arrayIndex格式。收集樣品計算我想導致這種格式如圖後作爲 enter image description here 我必須計算平均0,1,和2如下如下如何使用MongoDB計算單個字段的平均值?

{ 
    "result": [ 
    { 
     "0": 18, 
     "1": 58, 
     "2": 24 
    } 
    ] 
} 

是否有可能使結果在上面的格式。如果是,請告訴我如何計算平均值?

+0

平均的什麼?狀態數量? – chridam

+0

@chridam在狀態我想計算NumberInt(0),NumberInt(1)和NumberInt(2) –

+0

的平均值因此,鑑於上述兩個示例文檔,您的預期輸出是什麼? – chridam

回答

2

運行的聚合操作,以獲得第一,第二和第三狀態的平均定數組中MongoDB的外殼查詢如下:

var pipeline = [ 
    { 
     "$match": { 
      "Status.0": { $exists: true }, 
      "Status.1": { $exists: true }, 
      "Status.2": { $exists: true } 
     } 
    }, 
    { "$unwind": "$Status" }, 
    { 
     "$match": { 
      "Status.0": { $exists: true }, 
      "Status.1": { $exists: true }, 
      "Status.2": { $exists: true } 
     } 
    }, 
    { 
     "$group": { 
      "_id": null, 
      "0": { "$avg": "$Status.0" }, 
      "1": { "$avg": "$Status.1" }, 
      "2": { "$avg": "$Status.2" } 
     } 
    } 
] 

db.status.aggregate(pipeline); 
+0

你是非常好的...非常感謝你 –

+0

@chirdam我可以問爲什麼要使用$ unwind? –

+0

我們使用[**'$ unwind' **](https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#pipe._S_unwind)運算符,因爲它應用於列表數據它將爲應用展開的列表數據字段的每個元素生成一條新記錄。它基本上使數據平整,以便您可以將其作爲上一個管道中的單個文檔進行處理。 – chridam