2014-01-17 82 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

不客气,愉快帮助... –