Tôi gặp phải sự cố tương tự khi tìm nạp khoảng 35000 tài liệu. Để giải quyết nó, tôi đã sử dụng hàm tổng hợp (sakulstra:aggregate
) và trong trường hợp của tôi, nó đã thúc đẩy yêu cầu một cách đáng kinh ngạc. Định dạng kết quả rõ ràng là không giống nhau, nhưng vẫn dễ sử dụng để tính toán tất cả những thứ tôi cần.
Trước (7000ms):
const historicalAssetAttributes = HistoricalAssetAttributes.find({
date:{'$gte':startDate,'$lte':endDate},
assetId: {$in: assetIds}
}, {
fields:{
"date":1,
"assetId":1,
"close":1
}
}).fetch();
Sau (300ms):
const historicalAssetAttributes = HistoricalAssetAttributes.aggregate([
{
'$match': {
date: {'$gte': startDate, '$lte': endDate},
assetId: {$in: assetIds}
}
}, {
'$group':{
_id: {assetId: "$assetId"},
close: {
'$push': {
date: "$date",
value: "$close"
}
}
}
}
]);