我第一次在应用程序中使用 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 在查询时需要 2 秒到 16 秒,如下所示:
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 等,但时间差异太大。这可能是由使用的插件之一引起的问题吗?
任何人都可以帮忙吗?