gpt4 book ai didi

node.js - MongoDB 的随机 CursorNotFound 错误

转载 作者:可可西里 更新时间:2023-11-01 10:38:54 25 4
gpt4 key购买 nike

我使用游标在 NodeJS 中使用 mongodb 遍历 >30k 文档,并在此迭代期间在 processFn 中写入其他文档。

示例代码:

const cursor = collection
.find({}, { timeout: false })
.addCursorFlag('noCursorTimeout', true);

while (await cursor.hasNext()) {
const doc = await cursor.next();
await processFn({ id: doc._id.toHexString(), ...doc });
}

await cursor.close();

由于未知原因,我收到随机 CursorNotFound (43) 错误。

{   MongoError: cursor id 54902755976 not found
name: 'MongoError',
message: 'cursor id 54902755976 not found',
ok: 0,
errmsg: 'cursor id 54902755976 not found',
code: 43,
codeName: 'CursorNotFound' }

at /###/node_modules/mongodb-core/lib/connection/pool.js:593:63
at authenticateStragglers (/###/node_modules/mongodb-core/lib/connection/pool.js:516:16)
at Connection.messageHandler (/###/node_modules/mongodb-core/lib/connection/pool.js:552:5)
at emitMessageHandler (/###/node_modules/mongodb-core/lib/connection/connection.js:309:10)
at Socket.<anonymous> (/###/node_modules/mongodb-core/lib/connection/connection.js:452:17)
at Socket.emit (events.js:180:13)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at Socket.Readable.push (_stream_readable.js:218:10)
at TCP.onread (net.js:581:20)

我已经检查过它们不是超时。它们总是在不到 5 分钟后发生。此外,cursor.metrics 表示只有一个游标处于打开状态,并且此游标已启用 noCursorTimeout

我还检查了 processFn 是否正确解析。

我阅读了有关 session 和连接超时的信息,并将它们增加到极高的数字以进行测试。仍然没有变化。

还有什么可能的原因以及如何调试此错误?

最佳答案

我正在研究同样的错误并遇到了这个:

https://jira.mongodb.org/browse/SERVER-34810

看来是服务器问题,需要将mongo至少升级到3.6.6、4.0.1或4.1.1。

或者非常小的批量大小(~20)似乎在一定程度上缓解了这个问题。

关于node.js - MongoDB 的随机 CursorNotFound 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50933407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com