簡體   English   中英

Mongodb中的聚合和分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM