为什么Mongoose查找操作比使用原始MongoDB驱动程序慢?

时间:2017-11-03 13:43:03

标签: mongodb mongoose mongoose-plugins

我在应用程序中第一次使用Mongoose,与原始MongoDB驱动程序相比,我观察的find()或count()操作要慢得多。我想知道为什么。以下是使用的NodeJS npms:

            "mongodb": "^2.2.33",
            "mongodb-autoincrement": "^1.0.1",
            "mongoose": "^4.12.5",
            "mongoose-delete": "^0.4.0",
            "mongoose-sequence": "^4.0.1",
            "mongoose-type-email": "^1.0.5",
            "mongoose-type-url": "^1.0.2",

我的这个架构的一个索引是:

contactModel.index({
    _owner: 1,
    email: 1
})

在一个包含4.8M文档的集合中,当查询时,Mongoose从2s到16s:

contactModel.find({
    _owner: 'FFFFFFFFFFFFFFFFFFFFFFFF',
    email: 'johndoe@example.com'
})

Mongoose调试显示了这个原始查询:

Mongoose: contact.find({ email: { '$eq': 'johndoe@example.com' }, _owner: { '$eq': ObjectId("FFFFFFFFFFFFFFFFFFFFFFFF") }, deleted: { '$ne': true } }, { skip: 0, limit: 1, fields: { name: true, email: true, lifecycle: true, properties: true, subscribed: true, created: true, modified: true, _id: true, _sqlid: true, _owner: true } })

但是对于MongoDB,它不到100毫秒:

db.contact.find({
    _owner: ObjectId('FFFFFFFFFFFFFFFFFFFFFFFF'),
    email: 'johndoe@example.com'
})

我知道Mongoose必须应用架构默认值,将字符串转换为ObjectIds等应用架构但时间差太大。它可能是由其中一个插件引起的问题吗?

有人可以帮忙吗?

0 个答案:

没有答案