在MongoDB中合并/聚合多个文档

在MongoDB中合并/聚合多个文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的聚合有点问题。我收集了大量具有以下模式的平面文档: { _id:ObjectId("5dc027d38da295b969eca568"), emp_no:10001, salary:60117, from_date:"1986-06-26", to_date:"1987-06-26" } 这都是关于员工的年薪。数据是从关系数据库导出的,因此有多个文档具有相同的“emp_no”值,但其其余属性不同。我需要通过属性“emp_no”的值来聚合它们,因此我将得到如下结果: //


我的聚合有点问题。我收集了大量具有以下模式的平面文档:

{
  _id:ObjectId("5dc027d38da295b969eca568"),
  emp_no:10001,
  salary:60117,
  from_date:"1986-06-26",
  to_date:"1987-06-26"
}
这都是关于员工的年薪。数据是从关系数据库导出的,因此有多个文档具有相同的“emp_no”值,但其其余属性不同。我需要通过属性“emp_no”的值来聚合它们,因此我将得到如下结果:

//one document
{
  _id:ObjectId("5dc027d38da295b969eca568"),
  emp_no:10001,
  salaries: [
    {
      salary:60117,
      from_date:"1986-06-26",
      to_date:"1987-06-26"
    },
    {
      salary:62102,
      from_date:"1987-06-26",
      to_date:"1988-06-25"
    },
    ...
  ]
}

//another document
{
  _id:ObjectId("5dc027d38da295b969eca579"),
  emp_no:10002,
  salaries: [
    {
      salary:65828,
      from_date:"1996-08-03",
      to_date:"1997-08-03"
    },
    ...
  ]
}

//and so on

最后但并非最不重要的一点是,有将近290万个文档,因此通过“emp_no”手动聚合会有点问题
是否有一种方法可以仅使用mongo查询来聚合它们?我怎么做这种事?提前感谢您的帮助

聚合管道的组阶段可用于获取此类聚合。指定要按其分组的属性作为分组阶段中
\u id
字段的值

下面的查询如何为您工作

db.collection.aggregate([
  {
    "$group": {
      "_id": "$emp_no",
      "salaries": {
        "$push": {
          "salary": "$salary",
          "from_data": "$from_date",
          "to_data": "$to_date"
        }
      },
      "emp_no": {
        "$first": "$emp_no"
      },
      "first_document_id": {
        "$first": "$_id"
      }
    }
  },
  {
    "$project": {
      "_id": "$first_document_id",
      "salaries": 1,
      "emp_no": 1
    }
  }
])

它是有效的:)但是像以前一样将_id作为ObjectId之一,将emp_no作为emp_no呢?是的,可以将_id作为ObjectId和emp_no之一。我在回答中编辑了查询。很高兴能为您提供帮助:)