Mongodb 需要Mongo查询来生成具有聚合的特定结果集

Mongodb 需要Mongo查询来生成具有聚合的特定结果集,mongodb,aggregation-framework,aggregate-functions,Mongodb,Aggregation Framework,Aggregate Functions,我是mongodb新手,我有一个要求,希望知道如何使用Mongo聚合运算符生成自定义结果集。任何帮助都将不胜感激 需要按“公司”和“状态”对集合进行分组,并需要生成下面给出的结果集 收藏 [ { "company": "google", "status": "active", "offer": { "job": "develop

我是mongodb新手,我有一个要求,希望知道如何使用Mongo聚合运算符生成自定义结果集。任何帮助都将不胜感激

需要按“公司”和“状态”对集合进行分组,并需要生成下面给出的结果集

收藏

[
  {
    "company": "google",
    "status": "active",
    "offer": {
      "job": "developer",
      "salary": 10000.00
    },
    
  },
  {
    "company": "google",
    "status": "active",
    "offer": {
      "job": "designer",
      "salary": 500000.00
    },
    
  },
  {
    "company": "amazon",
    "status": "inactive",
    "offer": {
      "job": "designer",
      "salary": 500000.00
    },
    
  }
]
预期结果集

[
  {
      "company" : "google",
      "report" : [{
          "status" : "active",
          "totalSalary" : 60000
      },
      {
          "status" : "inactive",
          "totalSalary" : 0
      }]
  },
  {
      "company" : "amazon",
      "report" : [{
          "status" : "active",
          "totalSalary" : 0
      },
      {
          "status" : "inactive",
          "totalSalary" : 500000.00
      }]
  }
]
你应该100%地检查聚合,一开始有点复杂,但一旦你掌握了窍门,它们就很棒了。我也推荐你,这是一个做这种测试的好网站

你要找的是这样的东西

db.collection.aggregate([
  {
    $group: {
      _id: {
        company: "$company"
      },
      report: {
        $addToSet: "$offer"
      }
    }
  }
])

你可以测试一下。您可能还希望重命名生成的_id字段,该字段在组聚合中是必需的。您可以找到如何做到这一点

感谢Webox的快速响应。我需要多个字段(公司和状态),结果应根据字段“公司”对其进行分组。我的错,您希望在报告数组的单个元素中添加所有活动和非活动。那么,每个报告都将有一个“活动”将所有活动作业相加,一个“非活动”(每个公司)将所有非活动报告相加?如果有一个类别的0,它应该是0?当然,这就是我要找的。我可以生成类似的东西;但是,我需要通过取出该公司来重复数据。[{“公司”:“谷歌”,“状态”:“活动”,“总计”:10000},{“公司”:“谷歌”,“状态”:“非活动”,“总计”:500000},{“公司”:“亚马逊”,“状态”:“非活动”,“总计”:500000}]