繁体   English   中英

MongoDB:如何将所有文档合并到聚合管道中的单个文档中

[英]MongoDB: How to merge all documents into a single document in an aggregation pipeline

我的当前聚合输出如下:

[
    {
        "courseCount": 14
    },
    {
        "registeredStudentsCount": 1
    }
]

该数组有两个文档。 我想将所有文档组合成一个文档,其中包含 mongoDB 中的所有字段

{
    $group: {
      "_id": "null",
      data: {
        $push: "$$ROOT"
      }
    }
  }

当您将其添加为最后一个管道时,它会将所有文档放在 data 下,但这里的 data 将是一个对象数组。

在你的情况下,它会是

{ "data":[
    {
        "courseCount": 14
    },
    {
        "registeredStudentsCount": 1
    }
] }

另一种方法是,

db.collection.aggregate([
  {
    $group: {
      "_id": "null",
      f: {
        $first: "$$ROOT",
        
      },
      l: {
        $last: "$$ROOT"
      }
    }
  },
  {
    "$project": {
      "output": {
        "courseCount": "$f.courseCount",
        "registeredStudentsCount": "$l.registeredStudentsCount"
      },
      "_id": 0
    }
  }
])

它不像第一个那样动态。 由于您有两个文档,因此您可以使用这种方法。 它输出

[
  {
    "output": {
      "courseCount": 14,
      "registeredStudentsCount": 1
    }
  }
]

在第二种方法中使用额外的管道

 {
    "$replaceRoot": {
      "newRoot": "$output"
    }
  }

你会得到输出为

[
  {
    "courseCount": 14,
    "registeredStudentsCount": 1
  }
]
 db.collection.aggregate([
 {
   $group: {
    _id: 0,
     merged: {
    $push: "$$ROOT"
   }
   }
  },
 {
  $replaceRoot: {
  newRoot: {
    "$mergeObjects": "$merged"
   }
  }
 }
])

解释:

  1. 通过 push 将输出文档分组到一个字段中
  2. 用合并的对象替换文档根

游乐场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM