合計数は常に1つのドキュメントの結果になるため、が必要です。 $ facet
複数の集計パイプラインを実行してから、結果をマージします。通常のパイプラインに単純な$project
が含まれているとします。 結果を$count
とマージしたい 。以下の集計を実行できます:
db.col.aggregate([
{
$facet: {
totalCount: [
{ $count: "value" }
],
pipelineResults: [
{
$project: { _id: 1 } // your regular aggregation pipeline here
}
]
}
},
{
$unwind: "$pipelineResults"
},
{
$unwind: "$totalCount"
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [ "$pipelineResults", { totalCount: "$totalCount.value" } ]
}
}
}
])
$facet
の後 ステージでは、このような単一のドキュメントを取得します
{
"totalCount" : [
{
"value" : 3
}
],
"pipelineResults" : [
{
"_id" : ObjectId("5b313241120e4bc08ce87e46")
},
//....
]
}
次に、 $unwind を使用する必要があります 配列を複数のドキュメントに変換し、 $ replaceRoot $mergeObjects を使用 定期的なパイプラインの結果をルートレベルに昇格させるため。