我有以下模型和索引:
var mySchema = new Schema({
page: String,
date: Date,
data: Object,
_page: {
type: Schema.Types.ObjectId,
ref: 'Page'
},
});
mySchema.index({_page: 1, date: 1 }, {unique: true});
这个查询:
mySchema.find({
_page: page._id,
date: {
$gte: date1,
$lt: date2
}
})
.sort({
date: 1
})
.exec((err, result) => {
console.log(result);
})
它会像这样注销:
myschema.find({ date: { '$gte': new Date("Thu, 16 Nov 2017 23:00:00 GMT"), '$lt': new Date("Thu, 14 Dec 2017 23:00:00 GMT") }, _page: ObjectId("5a57b30bf54be100c315f2f5") }, { sort: { date: 1 }, fields: {} })
从大约4000个文档和~60mb的表中返回约30个结果大约需要1秒。
DB是mlab上的副本集群,查询速度非常类似于我从localhost或我的服务器连接的天气(数据库和w-europe中的服务器)
有没有办法加快速度?我索引或查询错误吗?
答案 0 :(得分:0)
使用lean()方法可以提高mongoose中查找查询的性能。原因是使用此函数返回普通的Javascript对象而不是额外的Mongoose方法,如保存函数,getter和setter。如果要检查普通Javascript对象和Mongoose对象的性能差异,可以访问this link
但是,您可以利用它仅用于读取操作。因此,如果只是查找操作,则可以使用lean()。
<canvas id='zipper-canvas'></canvas>