【发布时间】:2018-07-03 23:32:54
【问题描述】:
我有一个 GET all products 端点,它需要很长时间才能返回响应:
Product.find(find, function(err, _products) {
if (err) {
res.status(400).json({ error: err })
return
}
res.json({ data: _products })
}).sort( [['_id', -1]] ).populate([
{ path: 'colors', model: 'Color' },
{ path: 'size', model: 'Size' },
{ path: 'price', model: 'Price' }
]).lean()
尽管 products 集合中只有 60 个文档,但此查询最多需要 4 秒。
这个查询来自以前的开发者,我对 Mongoose 不是很熟悉。
sort 和 populate 的性能后果是什么?我认为populate 应该归咎于此?我不太确定 populate 在做什么,所以我不清楚如何避免它或在数据库级别建立索引以提高性能。
【问题讨论】:
-
您可以通过
db.products.createIndex({'_id': '-1''});创建索引,但我怀疑这就是问题所在,它很可能是populate完成的“连接”,这正在消耗能量。在链的末端使用explain()也可能会有所帮助。 -
感谢
explain()的提示
标签: javascript node.js mongodb mongoose nosql