6种方案教你彻底解决mongo查询报错: response error: Operation `users.findOne()` buffering timed out after 10000ms

下载了一个新的项目,启动项目后报错 [ERROR] response error: Operation users.findOne() buffering timed out after 10000ms

[ERROR] 2024-01-12 18:31:12 response error: Operation `users.findOne()` buffering timed out after 10000ms 
{
  stack: 'MongooseError: Operation `users.findOne()` buffering timed out after 10000ms\n' +
    '    at Timeout.eval (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:185:23)\n' +
    '    at listOnTimeout (node:internal/timers:569:17)\n' +
    '    at process.processTimers (node:internal/timers:512:7)'
}
[ERROR] 2024-01-12 18:31:40 response error: Operation `users.findOne()` buffering timed out after 10000ms 
{
  stack: 'MongooseError: Operation `users.findOne()` buffering timed out after 10000ms\n' +
    '    at Timeout.eval (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:185:23)\n' +
    '    at listOnTimeout (node:internal/timers:569:17)\n' +
    '    at process.processTimers (node:internal/timers:512:7)'
}

进行下述问题解决之前,请确认你的数据库连接配置完全无误,可以按照你的配置信息使用其他工具成功连接数据库

解决方案1: 增加超时时间

默认情况下,Mongoose的查询超时时间是10秒。可通过在查询操作前设置mongoose.set(‘bufferCommands’, false)来关闭查询缓冲,或者通过mongoose.set(‘bufferTimeout’, 30000)来增加查询缓冲时间。例如:

mongoose.set('bufferTimeout', 30000);

解决方案2: 关闭查询缓冲 ( 不太建议 )

mongoose.set('bufferCommands', false)

解决方案3:优化查询性能

如果查询数据量大,可优化查询性能减少查询时间:

  • 索引优化:常用字段添加索引,加快查询速度;
  • 限制查询结果数量:使用limit()限制返回结果数量;
  • 分页查询:查询结果分页;
  • 使用lean()方法:在查询操作中使用lean()方法可以将查询结果转换为纯JavaScript对象,避免了Mongoose对查询结果进行封装的开销。(这个我还没有用过哇,大家可以试试)

解决方案4:优化数据库服务器响应速度

下面是几种优化数据库服务器响应速度方案哦:

  • 增加数据库服务器的硬件配置,例如增加内存、使用SSD硬盘等;
  • 优化数据库的查询性能,例如合理设计数据库索引、使用查询优化器等;
  • 分布式部署数据库,将负载分散到多个服务器上;

解决方案5:

如果以上都无法解决的话,可以继续仔细翻找查看其他报错信息,有些情况下你会发现有其他报错,例如: mongo connect error MongoServerError: Authentication failed.

mongo start connect
error-> mongo connect error MongoServerError: Authentication failed.
    at Connection.onMessage (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongodb/lib/cmap/connection.js:201:30)
    at MessageStream.eval (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongodb/lib/cmap/connection.js:59:60)
    at MessageStream.emit (node:events:517:28)
    at processIncomingData (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongodb/lib/cmap/message_stream.js:124:16)
    at MessageStream._write (webpack-internal:///(api)/../../node_modules/.pnpm/[email protected]/node_modules/mongodb/lib/cmap/message_stream.js:33:9)
    at writeOrBuffer (node:internal/streams/writable:392:12)
    at _write (node:internal/streams/writable:333:10)
    at Writable.write (node:internal/streams/writable:337:10)
    at Socket.ondata (node:internal/streams/readable:777:22)
    at Socket.emit (node:events:517:28)
    at addChunk (node:internal/streams/readable:335:12)
    at readableAddChunk (node:internal/streams/readable:308:9)
    at Readable.push (node:internal/streams/readable:245:10)
    at TCP.onStreamRead (node:internal/stream_base_commons:190:23) {
  ok: 0,
  code: 18,
  codeName: 'AuthenticationFailed',
  connectionGeneration: 0,
  [Symbol(errorLabels)]: Set(2) { 'HandshakeError', 'ResetPool' }
}
方法1:
  • 添加authSource校验参数
  • 在 MongoDB 数据库的 URL 中,authSource 参数指定了用于进行身份验证的数据库。这个参数通常用于指定客户端连接数据库时要使用的验证数据库。
  • 具体详细信息请参考我的另一篇文章手把手教你理解MongoDB 数据库连接URL 格式、authSource参数
方法2:
  • mongodb的配置文件mongod.conf把authorization的值改为disabled
  • 手把手教你理解MongoDB 数据库连接URL 格式、authSource参数

解决方案6:

检查代码mongo版本是否和数据库存在兼容问题,请在代码里按照数据库版本进行使用安装使用mongo库依赖版本,具体操作步骤可:参考此文

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

你可能感兴趣的:(面向全栈,oracle,网络,数据库)