sql >> Database >  >> NoSQL >> MongoDB

$push gebruikte te veel geheugen en kan niet naar de schijf worden gemorst. Geheugenlimiet:104857600 bytes

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




  1. 3 manieren om een ​​string om te zetten naar een datum in MongoDB

  2. mongoDB array paginering

  3. Gedeeltelijke overeenkomsten met het primitieve pakket van mongo

  4. Als redis al deel uitmaakt van de stapel, waarom wordt Memcached dan nog steeds naast Redis gebruikt?