Ich bin auf das gleiche Problem gestoßen, als ich ungefähr 35000 Dokumente abgerufen habe. Um es zu lösen, habe ich die Aggregatfunktion (sakulstra:aggregate
) und in meinem Fall hat es die Nachfrage unglaublich gesteigert. Das Ergebnisformat ist offensichtlich nicht dasselbe, aber es ist immer noch einfach zu verwenden, um alle Dinge zu berechnen, die ich brauche.
Vorher (7000ms):
const historicalAssetAttributes = HistoricalAssetAttributes.find({
date:{'$gte':startDate,'$lte':endDate},
assetId: {$in: assetIds}
}, {
fields:{
"date":1,
"assetId":1,
"close":1
}
}).fetch();
Nach (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"
}
}
}
}
]);