我有一个像这样的架构:

{
  _id: <objectid>
  customer: <objectid>
  employee: <objectid>
  date: <Month/day/year>
  amount: <Number>
}


我试图使用angular创建一个页面,以提取该数据并每天构建单独的表。因此,类似昨天的选项卡,将打开一个表的视图,该表列出了我所有的员工及其当天的总和。像这样:

[{
  date: 10/29/2019
  dataFromThisDate: [
    {
      employee: <name>
      sumAmount: <sum(amount for this date)>
      list:  [<array of all of the transaction _ids
    },
    {
      employee: <name 2>
      //etc
    }]
 },
 {
   date: 10/30/2019
   dataFromThisDate: //etc
 }]


基本上据我所知只是:

MyCollection.aggregate(
  [{
    $group: {
       _id: "$date"
    }
  }],function(err, result) { //blah }
)


但是我不确定如何进行嵌套分组(首先按日期,然后按该日期的员工)。只是想一想,就好像我必须按日期分组,然后将所有数据传递到新的分组管道?

抱歉,我没有更多尝试过的东西,整个汇总工作对我来说是全新的,我找不到很好的例子,这些例子与我要尝试学习的东西足够相似。我查看了mongodb的api文档,并且了解了它们的基本示例并进行了实践,但是我很难提出如何执行更复杂的示例。

最佳答案

您可以尝试这样。这使用两个组。首先按日期和员工分组,对金额求和并添加交易ID。第二个按日期分组并添加员工及其总额和交易清单。

aggregate([{
    $group: {
        _id: {
            date: "$date",
            employee: "$employee"
        },
        amount: {
            $sum: "$amount"
        },
        transactionIds: {
            $push: "$_id"
        }
    }
}, {
    $group: {
        _id: "$_id.date",
        dataFromThisDate: {
            $push: {
                employee: "$_id.employee",
                sumAmount: "$amount",
                list: "$transactionIds"
            }
        }
    }
}])


输出量

 {
    "_id": "12/21/2016",
    "dataFromThisDate": [{
        "employee": "employee1",
        "sumAmount": 100,
        "list": [ObjectId("58151e881ac3c9ce82782663")]
    }, {
        "employee": "employee2",
        "sumAmount": 73,
        "list": [ObjectId("58151e881ac3c9ce82782665"), ObjectId("58151e881ac3c9ce82782666")]
    }]
 }

09-20 15:17