sql >> データベース >  >> NoSQL >> MongoDB

$ pushはメモリを使いすぎて、ディスクに流出できません。メモリ制限:104857600バイト

    それで、多くの苦労の末、これが私の問題を解決するために私がしたことです。最初のことは、データを制限せずに配列にプッシュすることはできないということを理解しました。そこで、$limitを使用しました および$skip 、パイプラインでデータをグループ化する前に(これにより、クエリのページネーションも維持されます)。しかし、問題は、グループ化する前に制限のために失われたレコードの総数を維持することでした。そこで、私が理解した解決策は、$facetを使用することです。 、これは、同じ集約パイプライン内に2つのパイプラインを実装するのに役立ちます。

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

    これが他の人に役立つことを願っています。乾杯:)




    1. MongoDB $ toInt

    2. コマンドラインからMongoDBデータベースを削除するにはどうすればよいですか?

    3. データベーストリガー一致式の$orセレクターが、データベーストリガーを構成するときにネストの第2レベルで機能しません

    4. アイテム数によるRedisポップリストアイテム