sql >> Databasteknik >  >> NoSQL >> MongoDB

$push använde för mycket minne och kan inte spilla till disken. Minnesgräns:104857600 byte

Så, efter så mycket kamp, ​​här är vad jag gjorde för att lösa mitt problem. Först förstod jag att jag inte kan skjuta in data i en array utan att begränsa den. Så jag använde $limit och $skip , innan du grupperar data i pipelinen.(Detta bibehåller också sideringen för min fråga). Men problemet var att bibehålla det totala antalet rekord eftersom det gick förlorat på grund av gränsen innan gruppering. Så, lösningen jag kom på är att använda $facet , vilket hjälper mig att implementera två pipelines inom samma aggregeringspipeline.

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 })

Hoppas detta kommer att hjälpa andra. Skål :)




  1. Hur kör jag mongodump-kommandot programmatiskt från node.js?

  2. $unionWith – MongoDB:s motsvarighet till UNION ALL

  3. MongodDB $dra bara ett element från arrayen

  4. kostnad för nycklar i JSON dokumentdatabas (mongodb, elasticsearch)