Vì vậy, sau rất nhiều cuộc đấu tranh, đây là những gì tôi đã làm để giải quyết vấn đề của mình Điều đầu tiên được hiểu rằng tôi không thể đẩy dữ liệu vào một mảng mà không giới hạn nó. Vì vậy, tôi đã sử dụng $limit
và $skip
, trước khi nhóm dữ liệu trong đường dẫn. (Điều này cũng duy trì việc phân trang cho truy vấn của tôi). Nhưng vấn đề là duy trì tổng số bản ghi vì nó đã bị mất do giới hạn trước khi nhóm. Vì vậy, giải pháp tôi đã tìm ra là sử dụng $facet
, điều này giúp tôi triển khai hai đường ống trong cùng một đường ống tổng hợp.
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 })
Hy vọng điều này sẽ giúp những người khác. Chúc mừng :)