Ik kwam hetzelfde probleem tegen toen ik ongeveer 35000 documenten ophaalde. Om het op te lossen, gebruikte ik de aggregaatfunctie (sakulstra:aggregate
) en in mijn geval heeft het het verzoek ongelooflijk gestimuleerd. Het resultaatformaat is natuurlijk niet hetzelfde, maar het is nog steeds gemakkelijk te gebruiken om alle dingen te berekenen die ik nodig heb.
Voor (7000ms):
const historicalAssetAttributes = HistoricalAssetAttributes.find({
date:{'$gte':startDate,'$lte':endDate},
assetId: {$in: assetIds}
}, {
fields:{
"date":1,
"assetId":1,
"close":1
}
}).fetch();
Na (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"
}
}
}
}
]);