1

我第一次在应用程序中使用 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 等,但时间差异太大。这可能是由使用的插件之一引起的问题吗?

任何人都可以帮忙吗?

4

0 回答 0