2017-08-14 91 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,'分組工作呢? –