मुझे उसी समस्या का सामना करना पड़ा जब मैं लगभग 35000 दस्तावेज़ ला रहा था। इसे हल करने के लिए, मैंने एग्रीगेट फंक्शन का इस्तेमाल किया (sakulstra:aggregate
) और मेरे मामले में इसने अविश्वसनीय रूप से अनुरोध को बढ़ाया है। परिणाम स्वरूप स्पष्ट रूप से समान नहीं है, लेकिन मुझे आवश्यक सभी चीज़ों की गणना करने के लिए इसका उपयोग करना अभी भी आसान है।
इससे पहले (7000ms) :
const historicalAssetAttributes = HistoricalAssetAttributes.find({
date:{'$gte':startDate,'$lte':endDate},
assetId: {$in: assetIds}
}, {
fields:{
"date":1,
"assetId":1,
"close":1
}
}).fetch();
बाद में (300 मि.से.):
const historicalAssetAttributes = HistoricalAssetAttributes.aggregate([
{
'$match': {
date: {'$gte': startDate, '$lte': endDate},
assetId: {$in: assetIds}
}
}, {
'$group':{
_id: {assetId: "$assetId"},
close: {
'$push': {
date: "$date",
value: "$close"
}
}
}
}
]);