Jadi, setelah banyak perjuangan, inilah yang saya lakukan untuk menyelesaikan masalah saya. Hal pertama yang dipahami bahwa saya tidak dapat memasukkan data ke dalam array tanpa membatasinya. Jadi saya menggunakan $limit
dan $skip
, sebelum mengelompokkan data dalam pipeline.(Ini juga mempertahankan pagination untuk kueri saya). Tetapi masalahnya adalah untuk mempertahankan jumlah total catatan karena hilang karena batas sebelum pengelompokan. Jadi, solusi yang saya temukan adalah menggunakan $facet
, yang membantu saya dalam mengimplementasikan dua pipeline dalam pipeline agregasi yang sama.
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 })
Semoga ini bisa membantu orang lain. Semangat :)