node.js - 如何重试mongodb事务?

标签 node.js mongodb mongoose concurrency transactions

我有两个不同的 API 端点,它们更新集合的相同字段(用户集合的钱包字段)。在这两个 API 中,事务都是使用 mongoose 实现的。当我同时击中两个端点时,一个端点成功执行,另一个端点出现“WriteConflict”错误,标签为“TransientTransactionError”。

我在 MongoDB 文档中读到它提供了有关“TransientTransactionError”错误的事务重试功能。所以,当我遇到这种错误时,请建议如何重试交易。

当我同时使用不同端点更新同一个文档时,我收到此错误。

MongoError: WriteConflict
    at Connection.<anonymous> (/Users/node_modules/mongodb-core/lib/connection/pool.js:443:61)
    at Connection.emit (events.js:196:13)
    at Connection.EventEmitter.emit (domain.js:471:20)
    at processMessage (/Users/node_modules/mongodb-core/lib/connection/connection.js:364:10)
    at TLSSocket.<anonymous> (/Users/node_modules/mongodb-core/lib/connection/connection.js:533:15)
    at TLSSocket.emit (events.js:196:13)
    at TLSSocket.EventEmitter.emit (domain.js:471:20)
    at addChunk (_stream_readable.js:290:12)
    at readableAddChunk (_stream_readable.js:271:11)
    at TLSSocket.Readable.push (_stream_readable.js:226:10)
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:166:17) {
  errorLabels: [ 'TransientTransactionError' ],
  operationTime: Timestamp { _bsontype: 'Timestamp', low_: 2, high_: 1591772061 },
  ok: 0,
  errmsg: 'WriteConflict',
  code: 112,
  codeName: 'WriteConflict',
  '$clusterTime': {
    clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 2, high_: 1591772061 },
    signature: { hash: [Binary], keyId: [Long] }
  },
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {}
}

提前致谢

最佳答案

文档 provides examples如何正确使用事务。单击“nodejs”以查看 Node 示例。
withTransaction驱动程序中的函数实现了重试功能。

关于node.js - 如何重试mongodb事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339285/

相关文章:

javascript - 在 Javascript (node.js) 中的 1, 4, 7... 处插入 div.row

node.js - 如何将 `bcrypt-as-promised` 从旧代码库安装到我的 ubuntu 机器上?

mongodb - SailsJS 部署到 Heroku,连接到 Mongolabs MongoDB

未添加 Javascript 对象属性

node.js - insertMany处理重复错误

Node.js套接字.io : TypeError Object() { [native code] } has no method 'assign'

node.js - 在 React/Redux 应用程序的 cookie 中保护 JWT 的最佳方法是什么?

node.js - MEAN.js 无法连接到 MongoDB

PHP、MongoDB 和使用 MapReduce 或聚合框架的电力监控

javascript - 使用 should.js 的单元测试 Number 失败