[英]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"
}
}
}
])
解释:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.