我在应用程序中第一次使用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等应用架构但时间差太大。它可能是由其中一个插件引起的问题吗?
有人可以帮忙吗?