MongoDB组聚合了多个元素和子文档

时间:2014-01-17 14:37:14

标签: 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"
        }
}

当我的结构平坦时,我能够获得一些Stackoverflow帮助分组,但是我遇到了数据子文档的问题。以下是我尝试过的众多查询变体之一:

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

我在语法上尝试了很多不同的变体,但似乎无法让它变得非常正确。提前谢谢。

1 个答案:

答案 0 :(得分: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指向节点数据"字段"在数据内部建立。