[英]aggregation and group in Mongodb
我在$ project之后獲得了以下文檔,但是現在我需要找出交易的平均值。 以下是我的“ $ project”之后,“ $ group”之前的文檔
{
"name" : "AAA",
"transactions" : [
{
"amount" : 500000
},
{
"amount" : 12700000
},
{
"amount" : 27500000
}
]
}
{
"name" : "BBBB",
"transactions" : [
{
"amount" : 2500000
},
{
"amount" : 5500000
},
{
"amount" : 18000000
}
]
}
{
"name" : "CCCC",
"transactions" : [
{
"amount" : 10000000
},
{
"amount" : 5000000
},
{
"amount" : 1000000
}
]
}
我嘗試過這樣的事情。
{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}}
我在_id字段中打印名稱值,但“平均值”在打印“空”
這是我得到的輸出
{ "_id" : "AAA", "average" : null }
{ "_id" : "BBB", "average" : null }
{ "_id" : "CCC", "average" : null }
我想念什么?
$ group階段在聚合框架上的問題在於,沒有什么可以累加來求平均值。 我的意思是,您正在處理“純”值數組,但是$ avg表達式不夠智能,無法總結該數組的所有內容。 您正在嘗試獲取整個數組的平均值。 實現此目的的正確方法是在上一個階段執行$ unwind ,這樣您就可以獲得像這樣的文檔
{
"name" : "AAA",
"transactions" : {"amount" : 500000}
}
{
"name" : "AAA",
"transactions" : {"amount" : 12700000}
}
{
"name" : "AAA",
"transactions" : {"amount" : 27500000}
}
現在,您可以執行應該像下面這樣的$ group階段
{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}}
這將為您為每個成員提供文檔之前先展開$ unwind的事務數組中包含的每個元素的平均值。
我認為您正在修Mongo University的mongodb課程,祝您好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.