我们正在使用Kadira来确定我们的Meteor应用程序有时运行缓慢的原因。你可以在图片中看到查找操作很快,而fetch几乎花了7秒。我知道这是一个悬而未决的问题,但有没有人知道可能导致这种情况的原因?
答案 0 :(得分:1)
find
命令将返回一个游标,它是指向数据库中对象的指针,而fetch
将返回一个包含所有对象的数组直接到您的浏览器。
似乎你正在检索很多物体,因为6秒钟是很多时间。我建议你检查一下你是否真的需要获取太多的对象,因为用户可能不会在一个屏幕上看到所有数据。
也许您已经拥有本地MongoDB中的数据,您可以通过块查询它们。 (使用MongoDB中的limit
约束。)
答案 1 :(得分:0)
我遇到了同样的问题,当时我要获取大约35000个文档。我使用了聚合函数( sakulstra:aggregate ),就我而言,它极大地提高了请求。结果格式显然不一样,但是它仍然很容易用于计算我需要的所有东西。
之前(7000毫秒):
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"
}
}
}
}
]);