我想获取每个公司的所有事件的总和。这是我的数据:

{company: "1" event:"a"}
{company: "1" event:"b"}
{company: "1" event:"c"}
{company: "2" event:"b"}
{company: "2" event:"b"}
{company: "3" event:"c"}
{company: "3" event:"c"}


我目前有这个信息来汇总活动的日期,但是我正在努力按公司对它们进行进一步分组:

{
  "aggregate": [

    {
      "$group": {
        "_id": "$event",
        "count": {"$sum": 1}
      }
    },
    {"$sort": {"_id": 1}}
  ]
}


结果如下:

[
    {
        “ _id”:“ a”,
        “计数”:1
    },
    {
        “ _id”:“ b”,
        “计数”:3
    },
    {
        “ _id”:“ c”,
        “计数”:2
    }]

我如何进一步按公司对事件计数进行分组,以产生类似于以下内容的内容:

 [{
        "_id": {
            "company" :"1",
            "events": [
                {
                    "event": "a",
                    "count": 1
                },
                {
                    "event": "b",
                    "count": 1
                },
                {
                    "event": "c",
                    "count": 1
                },
            ]
        }
    },
    {
        "_id": {
            "company" :"2",
            "events": [
                {
                    "event": "b",
                    "count": 2
                }
            ]
        }
    },
    {
        "_id": {
            "company" :"3",
            "events": [
                {
                    "event": "c",
                    "count": 2
                }
            ]
        }
    }
    ]


我已经在查询中尝试了各种其他组,但无法生成我想要的数据。还有一个警告:我无法处理服务器端的任何内容或更改架构,因此只能启用希望完成的查询。

最佳答案

db.collection.aggregate([
{
  $group:{
     _id:{company:"$company",event:"$event"},
     count:{$sum:1}
  }
},
{
  $group:{
     _id:"$_id.company",
     events:{$push:{event:"$_id.event",count:"$count"}}
  }
}
])


如果您需要与您提到的完全相同的输出,则添加$ project stage

$ project:{_ id:{company:“ $ _ id”,事件:“ $ events”}}

关于node.js - 多组使用 Mongoose ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47785315/

10-12 16:52