sql >> Databáze >  >> NoSQL >> MongoDB

$push používá příliš mnoho paměti a nemůže se přenést na disk. Limit paměti:104857600 bajtů

Takže, po tolika boji, tady je to, co jsem udělal, abych vyřešil svůj problém. První věc byla pochopit, že nemohu vložit data do pole, aniž bych je omezil. Použil jsem tedy $limit a $skip , před seskupením dat v kanálu. (Tím se také zachová stránkování mého dotazu). Ale problém byl udržet celkový počet záznamů, protože byly ztraceny kvůli limitu před seskupením. Takže řešení, na které jsem přišel, je použít $facet , což mi pomáhá při implementaci dvou kanálů v rámci stejného agregačního kanálu.

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

Doufám, že to pomůže ostatním. Na zdraví :)




  1. Atribut Mongoengine creation_time v dokumentu

  2. Jak zrušit nastavení všech řetězců záznamů v mongodb pomocí php?

  3. Přidat expiraci do mezipaměti Redis

  4. jak vyprší platnost klíče mapy v REDIS?