Docs 菜单
Docs 主页
/
MongoDB Manual
/

可重试读取

在此页面上

  • 先决条件
  • 启用可重试读取
  • 可重试读取操作
  • 行为

可重试读取允许 MongoDB 驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。

最低驱动程序版本

与 MongoDB Server 4.2 及更高版本兼容的官方 MongoDB 驱动程序支持可重试读取。

有关官方 MongoDB 驱动程序的更多信息,请参阅 MongoDB 驱动程序。

最低服务器版本
只有连接到 MongoDB Server 3.6 或更高版本时,驱动程序才能重试读取操作。

与MongoDB Server 4.2及更高版本兼容的官方MongoDB驱动程序默认启用重试读取。 要显式禁用可重试读取,请在部署的retryReads=false 连接string 中指定 。

mongosh 不支持可重试读取。

MongoDB 驱动程序支持重试以下读操作。该列表引用了每种方法的通用说明。有关具体语法和用法,请参阅该方法的驱动程序文档。

方法
描述
Collection.aggregate
Collection.count
Collection.countDocuments
Collection.distinct
Collection.estimatedDocumentCount
Collection.find
Database.aggregate

对于 Collection.aggregateDatabase.aggregate,驱动程序只能重试包括写入阶段的聚合管道,例如 $out$merge

CRUD API 读操作

Collection.watch
Database.watch
MongoClient.watch

变更流操作

MongoClient.listDatabases
Database.listCollections
Collection.listIndexes

枚举操作

Collection.find 支持的 GridFS 操作(例如 GridFSBucket.openDownloadStream

GridFS 文件下载操作

MongoDB 驱动程序可能会对其他操作提供重试支持,例如封装可重试读取操作的辅助方法或方法。请参考驱动程序文档,确定方法是否显式支持可重试读取。

提示

另请参阅:

以下操作支持可重试读取:

  • db.collection.mapReduce()

  • getMore

  • 任何读取命令都会传递给通用 Database.runCommand 帮助程序,该程序与读取或写入命令无关。

MongoDB 可重试读取仅进行一次重试尝试。这有助于解决暂时性网络错误或副本集选举,但不能解决持续性网络错误。

在重试读取操作之前,驱动程序使用读取命令的原始读取偏好执行服务器选择。如果驱动程序无法使用原始读取偏好选择服务器进行重试,则驱动程序会返回原始错误。

在执行服务器选择之前,驱动程序会等待 serverSelectionTimeoutMS 毫秒。可重试读取不会解决等待 serverSelectionTimeoutMS 后不存在符合条件的服务器的情况。

后退

可重试写入 (Retryable Writes)