Dus, na zoveel strijd, is dit wat ik deed om mijn probleem op te lossen. Allereerst werd begrepen dat ik de gegevens niet in een array kan duwen zonder deze te beperken. Dus ik gebruikte $limit
en $skip
, voordat de gegevens in de pijplijn worden gegroepeerd. (Hierdoor wordt ook de paginering voor mijn zoekopdracht behouden). Maar het probleem was om het totale aantal records te behouden, omdat het verloren was gegaan vanwege de limiet vóór het groeperen. Dus de oplossing die ik bedacht, is om $facet
te gebruiken , wat me helpt bij het implementeren van twee pijplijnen binnen dezelfde aggregatiepijplijn.
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 })
Hoop dat dit anderen zal helpen. Proost :)