除了通过Mongo视图将经过过滤的文档集返回给最终用户外,我还运行了一些函数来生成运行总计。但是由于某种原因,尽管我的find()
操作非常快(225毫秒),但我正在运行的此附加聚合要花6秒钟以上的时间才能完成,这会降低整个端点的速度,因为此数据是通过我回来了
我试图理解为什么这种聚合会这么慢?此聚合与最终用户传递的筛选器匹配,然后计算出现在返回的文档中的唯一客户ID的数量。看起来像这样:
let totalCustomers = await db
.collection("view_accounts_report")
.aggregate([{
$match: search
},
{
$group: {
_id: null,
customers: {
$addToSet: "$customer._id"
}
}
},
{
$project: {
uniqueCustomers: {
$size: "$customers"
}
}
}
])
.next();
为什么要花6秒钟才能运行?有任何想法吗?关于如何加快速度的任何提示?
答案 0 :(得分:1)
好吧,如果有很多不同的用户(或者通常有很多用户),那肯定要花一些时间。如果要检查,为什么要花费这么多时间,请尝试explain
argument。
另一方面,distinct
可能在这里是更好的选择:
let customers = await db.collection('view_accounts_report').distinct(search);
let totalCustomers = customers.length;