在MongoDB中合并/汇总多个文档


我的汇总存在一些问题。我有大量具有以下架构的平面文档:

{
  _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"),salaries: [
    {
      salary:60117,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查询将它们聚合?我该怎么做?预先感谢您的帮助

yrxxxyr 回答:在MongoDB中合并/汇总多个文档

聚合管道的组阶段可用于获取这种类型的聚合。在分组阶段中,将要分组的属性指定为_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
    }
  }
])
本文链接:https://www.f2er.com/3127888.html

大家都在问