तो, इतने संघर्ष के बाद, मैंने अपनी समस्या को हल करने के लिए क्या किया है। पहली बात समझ में आई कि मैं डेटा को सीमित किए बिना एक सरणी में धक्का नहीं दे सकता। इसलिए मैंने $limit
. का इस्तेमाल किया और $skip
, पाइपलाइन में डेटा को समूहीकृत करने से पहले। (यह मेरी क्वेरी के लिए पेजिनेशन भी बनाए रखता है)। लेकिन समस्या रिकॉर्ड की कुल संख्या को बनाए रखने की थी क्योंकि यह समूहीकरण से पहले सीमा के कारण खो गया था। इसलिए, मैंने जो समाधान निकाला वह है $facet
, जो मुझे एक ही एकत्रीकरण पाइपलाइन के भीतर दो पाइपलाइनों को लागू करने में मदद करता है।
db.prdfam.aggregate([{
$facet: {
"counts":[
{ '$match': {} },
{ '$lookup': { from: 'pt', localField: 'pfId', foreignField: 'pfId', as: 'pt' } },
{ '$unwind': '$pt' }, { '$match': {} },
{ '$lookup': { from: 'prds', localField: 'pt.ptId', foreignField: 'ptId', as: 'prd' } },
{ '$unwind': '$prd' }, { '$match': {} },
{ '$lookup': { from: 'del', localField: 'prd.prdId', foreignField: 'prdId', as: 'delivery' } },
{ '$unwind': '$delivery' }, { '$match': { 'delivery.currentDelivery': { '$ne': 'OBSOLETE' },
'$or': [ { 'prd.prdName': { '$regex': /^.*world.*/i } },
{ 'delivery.rInfo.dataFormat': { '$regex': /^.*world.*/i } },
{ 'delivery.dType': { '$regex': /^.*world.*/i } },
{ 'delivery.dId': 'WORLD' }, { 'delivery.UserId': 'WORLD' } ] } },
{ '$group': { _id: null, count: { '$sum': 1 } } }
],
"results":[
//same lookup & match conditions as in above element
{ '$project': { //fields to project } },
{ '$sort': { updatedAt: -1 } }, {$skip: 0},{ $limit : 10 },
{ '$group': { _id: null, results: { '$push': '$$ROOT' } } },
{ '$project': { results: 1 } }
]
}
}],
{ allowDiskUse: true })
आशा है कि यह दूसरों की मदद करेगा। चीयर्स :)