【问题标题】:Speed up Slow Mongo / Mongoose Query加快慢速 Mongo / Mongoose 查询
【发布时间】:2018-06-25 05:32:04
【问题描述】:

我有以下模型和索引:

    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 或我的服务器连接的天气非常相似(db 和服务器在 w-europe)

有什么方法可以加快速度吗?我是否索引或查询错误?

【问题讨论】:

  • 不清楚您的数据库服务器是在网络上运行还是在本地运行。导致缓慢的因素有很多。内存、磁盘、网络延迟等
  • @Saleem 更新了问题。希望这会有所帮助...
  • 你能发布运行explain() 命令的输出吗?
  • @Seb,请按照@Zlatko 的建议包括explain 的输出

标签: node.js mongodb mongoose


【解决方案1】:

在mongoose中使用lean()方法可以提高find查询的性能。原因是使用这个函数返回纯 Javascript 对象而不是额外的 Mongoose 方法,如保存函数、getter 和 setter。如果你想检查一个普通的 Javascript 对象和 Mongoose 对象的性能差异,你可以访问this link

但是,您可以将其仅用于读取操作。所以,如果它只是查找操作,你可以使用lean()。

mySchema.find(...).lean().exec(function(err, docs) {
  ...
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2011-07-30
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多