簡體   English   中英

Mongodb 聚合:如何合並兩個不同的組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM