Jeg stødte på det samme problem, da jeg hentede omkring 35.000 dokumenter. For at løse det brugte jeg aggregatfunktionen (sakulstra:aggregate
), og i mit tilfælde har det forstærket anmodningen utroligt. Resultatformatet er åbenbart ikke det samme, men det er stadig nemt at bruge til at beregne alle de ting, jeg har brug for.
Før (7000ms) :
const historicalAssetAttributes = HistoricalAssetAttributes.find({
date:{'$gte':startDate,'$lte':endDate},
assetId: {$in: assetIds}
}, {
fields:{
"date":1,
"assetId":1,
"close":1
}
}).fetch();
Efter (300 ms):
const historicalAssetAttributes = HistoricalAssetAttributes.aggregate([
{
'$match': {
date: {'$gte': startDate, '$lte': endDate},
assetId: {$in: assetIds}
}
}, {
'$group':{
_id: {assetId: "$assetId"},
close: {
'$push': {
date: "$date",
value: "$close"
}
}
}
}
]);