Nik*_*kov 4 mongoose mongodb node.js
我有一个包含10-12k文档的MongoDB数据库,在尝试获取所有文档时遇到的查询速度非常慢,如下所示:
Sales.find()
.where('author').equals(author)
.where('date').gt(startDate.unix()).lt(endDate.unix())
.exec(function(err, results) {
callback();
});
Run Code Online (Sandbox Code Playgroud)
此查询提取大约10.5k文档,执行时需要1000-1300ms.我尝试删除"where"条件 - 它只会使它变慢(获取更多文档?).
问题来自Mongoose,MongoDB,JavaScript还是Node?我以前运行PHP/MySQL数据库,在类似条件下速度提高10-20倍,比如获取10k +行数据.我究竟做错了什么?
编辑
销售架构:
var salesSchema = new Schema({
author: String,
kind: String,
productID: String,
description: String,
date: String,
amount: String,
transactionID: {
type: String,
unique : true
}
});
Run Code Online (Sandbox Code Playgroud)
来自RoboMongo桌面客户端的查询结果:
db.getCollection('sales').find({}).explain()
executionTimeMillis: 46
nReturned: 10359
Run Code Online (Sandbox Code Playgroud)
问题来自Mongoose.默认情况下,find()会将文档作为Mongoose Documents返回,这会花费很多.通过向查询添加lean(),文档作为纯JavaScript对象返回,对于10k +返回文档的情况,查询时间减少了3-5倍.
Sales.find()
.where('author').equals(author)
.where('date').gt(startDate.unix()).lt(endDate.unix())
.lean()
.exec(function(err, results) {
callback();
});
Run Code Online (Sandbox Code Playgroud)
在这里阅读更多内容:http: //www.tothenew.com/blog/high-performance-find-query-using-lean-in-mongoose-2/
| 归档时间: |
|
| 查看次数: |
4311 次 |
| 最近记录: |