[英]Mongodb aggregation : how to merge two different groups
嘗試獲取每個用戶的各種狀態的計數和過期項目的計數。 以下是示例文檔:
[{
_id:"12324332432",
caseInd:"TASK123",
TaskId:"12345",
dueDate:ISODate("2021-03-22T00:00:00Z"),
assingee:"ABC",
status:"IN_PROGRESS",
completionDate:null
},
{
_id:"12324332433",
caseInd:"TASK124",
TaskId:"12345",
dueDate:ISODate("2021-03-01T00:00:00Z"),
assingee:"CDE",
status:"IN_PROGRESS",
completionDate:null
},
{
_id:"12324332434",
caseInd:"TASK125",
TaskId:"12345",
dueDate:ISODate("2021-03-31T00:00:00Z"),
assingee:"ABC",
status:"COMPLETED",
completionDate:ISODate("2021-03-01T00:00:00Z")
}...]
使用聚合,我想獲取每個用戶的任務計數(已完成、進行中和過期)。 喜歡
[{
_id : ABC ,
data: [
{status:"Completed", count:15},
{status:"InProgress", count:3},
{status:"Overdue", count:3}]
},{
_id : CDE,
data: [
{status:"Completed", count:5},
{status:"InProgress", count:1},
{status:"Overdue", count:0}]
}]
我已經厭倦了這個解決方案,但不確定如何包括過期計數。
db.colName.aggregate([ {$project: {_id:0,
dueDateIn:{$divide:[{$subtract:[new Date(),$dueDate]},86400000]},
status:1,
assignee:1
}
}, {
$group:{
_id:{"assignee":"$assignee", "status":"$status"},
count:{$sum:1}
},
$group:{
_id:"$_id.assignee" , result:{$push:{"status":"$_id.status", count:"$count"}}
}
}]) ```
Any help would be highly appreciated. Thank you.
看看 $group 管道中的自定義 $accumulator。
使用_id
字段對文檔進行分組后,您可以使用自定義累加器來統計狀態。
$group https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
$accumulator https://docs.mongodb.com/manual/reference/operator/aggregation/accumulator/#grp._S_accumulator
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.