2017-08-14 21 views
0

多发群体,我试图用mongoDb汇总这些数据:用MongoDB的总

"_id": ObjectId("598dbd301ab6476e5b15e05e"), 
"updated_at": ISODate("2017-08-11T14:20:32.865Z"), 
"created_at": ISODate("2017-08-11T14:20:32.865Z"), 
"action": ObjectId("59760749a398cb323cf1c051"), 
"subAction": ObjectId("5980c3807a8cb300110d87d3"), 
"person": ObjectId("598dbd2f1ab6476e5b15e05b"), 
"session": ObjectId("598dbd2f1ab6476e5b15e05c"), 
"dateAccomplish": ISODate("2017-08-11T14:20:32Z"), 
"createdBy": ObjectId("595f8426645bf5f47366fb29"), 
"updatedBy": ObjectId("595f8426645bf5f47366fb29"), 

我想要做的是,我需要找回2组。它必须分组actionssubactions

预期的输出数据是这样的:

movactions: [ 
{ 
    _id: $created_at, 
    count: ?, 
    data:[ 
     { 
      _id: "$action", 
      count: 3, 
      data: [ 
       { 
        _id: "$subaction", 
        count: 2 
       } 
      ] 
      } 
    ] 
}, 
] 

有许多辅助作用的是有一个动作,我希望聚合每个动作他们的孩子子动作,由多个领域的上市

+0

所以你试过什么? –

+0

我可以按操作分组,但不知道如何使用复合键将匹配操作与其子动作 –

+0

分组https://docs.mongodb.com/manual/reference/operator/aggregation/group/#group-by-month - 日和年? –

回答

0

分组,$group应用化合物_id多次应用,逐渐减少它在每个下一组:

db.collection.aggregate([ 
    {$group:{ 
     _id:{created_at:"$created_at", action:"$action", subAction:"$subAction"}, 
     count: {$sum:1} 
    }}, 
    {$group:{ 
     _id:{created_at:"$_id.created_at", action:"$_id.action"}, 
     count: {$sum:1}, 
     data: {$push:{_id: "$_id.subAction", count:"$count"}} 
    }}, 
    {$group:{ 
     _id:"$_id.created_at", 
     count: {$sum:1}, 
     data: {$push:{_id: "$_id.action", count:"$count", data:"$data"}} 
    }}, 
    {$project: { 
     _id:0, 
     created_at:"$_id", 
     count:1, 
     data:1 
    }} 
]); 
+0

有点像这样,但我有很多subAction有一个动作,我想抓住它属于 –

+0

嗯,所以这是什么问题? 'action'中的'data'应该包含所有具有'created_at'和'action'的'subActions'。 –

+0

他们有不同的'created_at'日期。你如何期待'_id:$ created_at,'分组工作呢? –