Javascript MondoDB/Mongoose查询响应太慢

Javascript MondoDB/Mongoose查询响应太慢,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我是MongoDB/Mongoose的新手,在一个超过25000个文档的大型数据库中工作。我需要配置不同的查询:按字段,前10个文档,一个按id。问题在于性能-服务器响应速度太慢,大约10-15秒。 请告诉我如何配置,以便服务器响应速度更快? 它是否仅依赖于模式设置,或者还依赖于其他内容,例如数据库连接参数或查询参数? P.S.查询应按“地区”和“地点”进行。 谢谢你的帮助 以下是模式: const mongoose = require('mongoose'); const Schema =

我是MongoDB/Mongoose的新手,在一个超过25000个文档的大型数据库中工作。我需要配置不同的查询:按字段,前10个文档,一个按id。问题在于性能-服务器响应速度太慢,大约10-15秒。 请告诉我如何配置,以便服务器响应速度更快? 它是否仅依赖于模式设置,或者还依赖于其他内容,例如数据库连接参数或查询参数? P.S.查询应按“地区”和“地点”进行。 谢谢你的帮助

以下是模式:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const houseSchema = new Schema({
  code: {
    type: String,
    required: false
  },
  name: {
    type: String,
    required: true
  },
  district: {
    type: String,
    required: true
  },
  locality: {
    type: String,
    required: false
  },
  recountDate: {
    type: Date,
    default: Date.now
  },
  eventDate: {
    type: Date,
    default: Date.now
  },
  events: {
    type: Array,
    default: []
  }
});

module.exports = mongoose.model('House', houseSchema);
连接参数:

mongoose.connect(
  `mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PASSWORD}@cluster0-vuauc.mongodb.net/${process.env.MONGO_DB}?retryWrites=true&w=majority`,
  {
    useNewUrlParser: true,
    useUnifiedTopology: true
  }
).then(() => {
  console.log('Connection to database established...')
  app.listen(5555);
}).catch(err => {
  console.log(err);
});
使用中继执行查询:

query {
  viewer {
    allPosts (first: 10) {
      edges {
        node {
          id
          code
          district
          locality
          recountDate
          eventDate
          events
        }
      }
    }
  }
}

MongoDB执行查询的速度非常快。但这也取决于您如何编写查询。用于获取前10个文档,并将其从集合中按降序排序为_id。您需要在查询中使用限制和排序

db.collectionName.find({}).limit(10).sort({_id:-1})

确保这不是连接问题。尝试从MongoDB shell运行查询

mongo mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PASSWORD}@cluster0-vuauc.mongodb.net/${process.env.MONGO_DB}?retryWrites=true&w=majority
db.collection.find({condition}).limit(10)
如果在MongoDB外壳中,它的响应速度比Mongoose快:

Node.js驱动程序存在一个问题,它使用纯Javascript,从BSON到JSON的序列化速度非常慢

尝试安装bson-ext

BSOXEXT模块是一个用C++编写的可选BSON解析器。它提供了更好的反序列化性能以及与纯javascript解析器类似或稍微更好的序列化性能

使用投影仅返回必要的数据 当您只需要文档中的字段子集时,您可以通过只返回所需的字段来实现更好的性能:

例如,如果在对posts集合的查询中,您只需要时间戳、标题、作者和摘要字段,则会发出以下命令:

db.posts.find( {}, { timestamp : 1 , title : 1 , author : 1 , abstract : 1} ).sort( { timestamp : -1 } ).limit(10)
您可以阅读以进行查询优化