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/registry.npmmirror.com+mongoose@7.0.2/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/registry.npmmirror.com+mongoose@7.0.2/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/registry.npmmirror.com+mongodb@5.1.0/node_modules/mongodb/lib/cmap/connection.js:201:30)
at MessageStream.eval (webpack-internal:///(api)/../../node_modules/.pnpm/registry.npmmirror.com+mongodb@5.1.0/node_modules/mongodb/lib/cmap/connection.js:59:60)
at MessageStream.emit (node:events:517:28)
at processIncomingData (webpack-internal:///(api)/../../node_modules/.pnpm/registry.npmmirror.com+mongodb@5.1.0/node_modules/mongodb/lib/cmap/message_stream.js:124:16)
at MessageStream._write (webpack-internal:///(api)/../../node_modules/.pnpm/registry.npmmirror.com+mongodb@5.1.0/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库依赖版本,具体操作步骤可:参考此文
- 今天就写到这里啦~
- 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
- 大家要天天开心哦
欢迎大家指出文章需要改正之处~
学无止境,合作共赢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-01-22 Java基础学习笔记-数据类型、数制
2022-01-22 Java基础学习笔记-关键字、标识符、分隔符