2014-01-17 80 views
1

我是MongoDB的新手,想弄清楚如何基於兩個元素進行分組,其中一個是時間,另一個是子文檔。我的數據結構是基於多維數據集結構:MongoDB多個元素和子文檔的組合聚合

{ 
     "_id" : ObjectId("52d931f9f61313b46bf456b0"), 
     "type" : "build", 
     "time" : ISODate("2014-01-17T01:27:18.413Z"), 
     "data" : { 
       "build_number" : 7, 
       "build_duration" : 885843, 
       "build_url" : "job/Test_Job/7/", 
       "build_project_name" : "Test_Job", 
       "build_result" : "SUCCESS" 
     } 
} 

我能得到一些幫助,#1分組時我的結構是平的,但我不會與數據子文檔的麻​​煩。以下是我已經嘗試了許多變化的查詢之一:

db.nb.aggregate(  
    {   
     $group: {    
      _id: {     
       dayOfMonth: { $dayOfMonth: "$time" }, 
       build_project_name: { data: $build_project_name } 
      }, 
      build_duration: { $avg: data: { "$build_duration" } }      
     },  
    } 
) 

我試過的語法許多不同的變化,但似乎無法得到它完全正確。先謝謝你。

回答

1

我覺得幾乎要做到這一點:

db.nb.aggregate(
[ 
    {$group: 
     {_id: 
      { dayOfMonth: { $dayOfMonth: "$time" }, 
      build_project_name: "$data.build_project_name" 
     }, 
     build_duration: { $avg: "$data.build_duration" }} 
    } 
]) 

首先,記住總接收操作的數組,輸入:

db.collection.aggregate([ 
{...}, 
{...} 
]) 

二,子文件引用這樣表示一棵樹,所以$ data.buildduration指向節點數據內的「字段」數據。

+0

謝謝!感謝工作 – JamesE

+0

不客氣,愉快幫助... –