MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

$push menggunakan terlalu banyak memori dan tidak dapat tumpah ke disk. Batas memori:104857600 byte

Jadi, setelah banyak perjuangan, inilah yang saya lakukan untuk menyelesaikan masalah saya. Hal pertama yang dipahami bahwa saya tidak dapat memasukkan data ke dalam array tanpa membatasinya. Jadi saya menggunakan $limit dan $skip , sebelum mengelompokkan data dalam pipeline.(Ini juga mempertahankan pagination untuk kueri saya). Tetapi masalahnya adalah untuk mempertahankan jumlah total catatan karena hilang karena batas sebelum pengelompokan. Jadi, solusi yang saya temukan adalah menggunakan $facet , yang membantu saya dalam mengimplementasikan dua pipeline dalam pipeline agregasi yang sama.

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

Semoga ini bisa membantu orang lain. Semangat :)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Linq ke Filter MongoDB

  2. Cara mendapatkan kembali dokumen Asli setelah agregasi

  3. Periksa apakah database mongodb ada?

  4. Apakah MongoDB entah bagaimana terbatas pada satu inti?

  5. Hitungan catatan berdasarkan Tanggal MongoDB