कुल गणना हमेशा एक-दस्तावेज़ परिणाम होगी, इसलिए आपको की आवश्यकता होगी। $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 के साथ रूट स्तर पर नियमित पाइपलाइन परिणामों को बढ़ावा देने के लिए।