2014-03-13 29 views
0

我有許多以下面的json結構構建的報告 日期/國家/供應商,其中日期/國家/供應商是變量,實際數據存儲在這棵json樹的葉子。在變量json結構中使用mongodb進行聚合的最佳方法

例如簡化JSON想看看如下

{ 
    "1/2/2001" : 
    { 
    "DE": { 
      "Vendor A" : { 
          leaf data... 
          revenue:123213 
          } 
      "Vendor B" : { 
          leaf data... 
          revenue:123213 
          } 
      } 
    } 

現在,可以說我想要聚合的收入。有沒有辦法用Mongo的聚合框架做到這一點,或者我是否需要做三個嵌套for循環。

在此先感謝,

+0

不幸的是,沒有這個結構。您的文檔結構使路徑未知。建議您將文檔標準化並將這些唯一鍵從對象名移到屬性中,然後使用數組。 –

+0

謝謝@EliGassert。我明白這將如何工作。每個數組條目是[Date:X,Country:y,Vendor:z,data:{revenue:12321}] – user1438162

+0

正確。如果你這樣做了,那麼你可以輕鬆地遍歷「data.revenue」文檔並進行聚合。 –

回答

1

如果你可以組織你的JSON這樣:

{ 
    "date": "1/2/2001", 
    "country": "DE", 
    "vendors": [ 
     { 
      "vendor": "Vendor A", 
      "leafdata": "xxx", 
      "revenue": 123213 
     }, 
     { 
      "vendor": "Vendor b", 
      "leafdata": "xxx", 
      "revenue": 123213 
     } 
    ] 
} 

那麼它很容易與聚合框架,你可以像下面的查詢:

[{ 
    $unwind: '$vendors' 
}, 
{ 
    $group: { 
     _id: '$country', 
     revenue: { 
      $sum: '$vendors.revenue' 
     } 
    } 
}] 

這將使營收爲所有國家的你有收藏。

注:我只使用日期作爲字符串,但我會建議使用ISODate。