Overview
在本节中,您可以确定必须对应用程序进行哪些更改才能将驾驶员程序升级到新版本。
升级前,请执行以下操作:
确保新的驾驶员版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的Java运行时环境 (JRE) 兼容。 要查看兼容性信息,请参阅 兼容性页面。
在 重大更改部分中,解决应用程序使用的驾驶员的当前版本与计划升级版本之间发生的任何重大更改。要学习;了解有关MongoDB Server发布更改的更多信息,请参阅服务器版本兼容性更改部分。
提示
为了最大限度地减少将来升级驾驶员版本时应用程序可能需要的更改数量,请使用 Stable API。
重大更改
破坏性变更 (breaking change) 是对特定版本驱动程序中的约定或行为的修改,如果在升级前未解决,可能会阻止应用程序正常工作。
本节中的重大更改按引入它们的驾驶员版本进行分类。升级驾驶员程序版本时,解决当前版本和升级版本之间的所有重大更改。示例,如果您要将驾驶员从 v5.0 升级到 v5.5,解决v5.0 之后版本的所有重大更改包括为 v5.5 列出的任何内容。
版本 5.5破坏性变更
该驾驶员不再与MongoDB Server版本 4.0 兼容。要了解有关此更改的更多信息,请参阅驱动程序版本 5.5 服务器支持更改部分。
版本 5.2破坏性变更
此驱动程序版本引入了以下破坏性变更 (breaking change):
删除对MongoDB Server v3.6 的支持。 要学习;了解有关此更改的更多信息,请参阅驱动程序版本 5.2服务器支持更改部分。
修改mongodb-crypt依赖项版本控制以匹配Java虚拟机(JVM)驱动程序的版本控制。未来版本的
mongodb-crypt
将与驾驶员一起发布,并股票相同的版本号。您必须将mongodb-crypt
依赖项升级到 v5。2。0在为此发布升级驾驶员时。
版本 5.1破坏性变更
此驱动程序版本引入了以下破坏性变更 (breaking change):
使用
MONGODB-OIDC
身份验证机制时,不能在authMechanismProperties
连接字符串值中包含逗号字符。 如果authMechanismProperties
值包含逗号,请将该值作为连接选项传递到MongoClientSettings
实例中。
版本 5.0 破坏性变更 (breaking change)
此驱动程序版本引入了以下破坏性变更 (breaking change):
对
ConnectionId
类进行了以下更改:ConnectionId
构造函数现在接受类型为long
的值而不是类型为int
的值作为其第二个参数。 同样,构造函数现在接受类型为Long
的值作为其第三个参数,而不是类型为Integer
的值。 由于此更改破坏了二进制兼容性,因此请重新编译调用ConnectionId
构造函数的任何现有代码。withServerValue()
方法现在接受类型为long
而不是int
的参数。 由于此更改破坏了二进制兼容性,因此您必须重新编译调用withServerValue()
方法的所有代码。getServerValue()
方法现在返回类型为Long
的值,而不是类型为Integer
的值。 同样,getLocalValue()
方法返回类型为long
的值,而不是类型为int
的值。 由于此更改会破坏二进制文件和源代码的兼容性,因此请更新使用这些方法的所有源代码并重新构建二进制文件。
将
org.bson.codecs.record.annotations
包中的以下记录注解替换为org.bson.codecs.pojo.annotations
包中的同名注解:BsonId
BsonProperty
BsonRepresentation
更改
SocketSettings.Builder.connectTimeout()
和SocketSettings.Builder.readTimeout()
方法的connectTimeout
超时持续时间参数的数据类型。 此参数的数据类型现在是long
,而不是int
。在早期版本中,对于这两种方法,此参数的类型均为
int
。 此更改破坏了二进制兼容性,需要重新编译,但不需要更改代码。删除了在
Beta
中独家发布的Filters.eqFull()
方法,该方法允许您在执行向量搜索时构造相等过滤。 相反,您可以在实例化VectorSearchOptions
类型时使用Filters.eq()
方法,如以下代码所示:val opts = vectorSearchOptions().filter(eq("x", 8)) 更改
ClusterSettings
计算ClusterConnectionMode
设置的方式,通过使用指定的副本集名称使其更加一致,而无论其配置如何。 以前,驾驶员仅在连接字符串中设立副本集名称。示例,以下两个代码示例均会返回值
ClusterConnectionMode.MULTIPLE
。 此前,第二个示例会返回ClusterConnectionMode.SINGLE
。ClusterSettings.builder() .applyConnectionString(ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset")) .build() .mode ClusterSettings.builder() .hosts(listOf(ServerAddress("127.0.0.1", 27017))) .requiredReplicaSetName("replset") .build() .mode BsonDecimal128
值响应方法调用的方式与Decimal128
值相同。BsonDecimal128.isNumber()
现在会返回true
,而BsonDecimal128.asNumber()
会返回等效的BsonNumber
。删除 ServerAddress 方法
getSocketAddress()
和getSocketAddresses()
。使用
java.net.InetAddress
的getByName()
实例方法,而不是getSocketAddress()
。使用
java.net.InetAddress
的getAllByName()
实例方法,而不是getSocketAddresses()
。删除 UnixServerAddress 方法
getSocketAddress()
和getUnixSocketAddress()
。使用
java.net.InetAddress
的getByName()
实例方法,而不是getSocketAddress()
。构造一个
jnr.unixsocket.UnixSocketAddress
实例,而不是getUnixSocketAddress()
。 将 UNIX 套接字文件的完整路径传递给构造函数。 默认情况下, MongoDB会创建位于"/tmp/mongodb-27017.sock"
的 UNIX 套接字文件。 要学习;了解有关UnixSocketAddress
类的更多信息,请参阅 UnixSocketAddress API文档。删除
Parameterizable
接口。 如果编解码器适用于参数化类型,请重写编解码器的CodecProvider
上的CodecProvider.get()
方法,而不是在自定义Codec
类型上实现此接口。从
ReadPreference
和TaggableReadPreference
类中删除isSlaveOk()
方法。 要检查读取偏好是否允许从副本集的从节点读取,请改用这些类中的isSecondaryOk()
方法。移除
collStats
命令的DBCollection.getStats()
和DBCollection.isCapped()
辅助方法。您可以使用$collStats
聚合管道阶段来代替这些方法。删除
MapCodec
和IterableCodec
类。MapCodec
使用MapCodecProvider
,而不是 。对于不是IterableCodec
Collection
类型的Iterable
类型,请使用CollectionCodecProvider
或IterableCodecProvider
,而不是 。从
MapReducePublisher
和MapReduceIterable
类中删除sharded()
和nonAtomic()
方法。删除了以下与
geoHaystack
索引一起使用的方法:Indexes.geoHaystack()
IndexOptions.getBucketSize()
IndexOptions.bucketSize()
相反,您可以在 2d 索引上使用
$geoNear
聚合管道阶段或地理空间查询操作符。有关更多信息,请参阅 MongoDB Server 手册中的“地理空间查询”页面。从查找操作中删除
oplogReplay
选项。 以下oplogReplay
方法不再可用:DBCursor.oplogReplay()
DBCollectionFindOptions.isOplogReplay()
DBCollectionFindOptions.oplogReplay()
FindPublisher.oplogReplay()
FindIterable.oplogReplay()
删除以下
Exception
构造函数:MongoBulkWriteException(BulkWriteResult, List<BulkWriteError>, WriteConcernError, ServerAddress)
MongoCursorNotFoundException(long, ServerAddress)
MongoQueryException(ServerAddress, int, String)
MongoQueryException(ServerAddress, int, String, String)
MongoQueryException(MongoCommandException)
删除
BulkWriteResult.acknowledged()
方法的以下重载:acknowledged(Type, int, List<BulkWriteUpsert>)
acknowledged(Type, int, Integer, List<BulkWriteUpsert>)
acknowledged(int, int, int, Integer, List<BulkWriteUpsert>)
删除以下
ChangeStreamDocument
构造函数:ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, TDocument, BsonDocument, ...)
ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)
ChangeStreamDocument(OperationType, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)
删除事件的以下构造函数:
CommandEvent(RequestContext, int, ConnectionDescription, String)
CommandEvent(int, ConnectionDescription, String)
CommandEvent(RequestContext, long, int, ConnectionDescription, String)
CommandFailedEvent(RequestContext, int, ConnectionDescription, String, long, Throwable)
CommandFailedEvent(int, ConnectionDescription, String, long, Throwable)
CommandStartedEvent(RequestContext, int, ConnectionDescription, String, String, BsonDocument)
CommandStartedEvent(int, ConnectionDescription, String, String, BsonDocument)
CommandSucceededEvent(RequestContext, int, ConnectionDescription, String, BsonDocument, long)
CommandSucceededEvent(int, ConnectionDescription, String, BsonDocument, long)
ConnectionCheckedInEvent(ConnectionId)
ConnectionCheckedOutEvent(ConnectionId, long)
ConnectionCheckedOutEvent(ConnectionId)
ConnectionCheckOutFailedEvent(ServerId, long, Reason)
ConnectionCheckOutFailedEvent(ServerId, Reason)
ConnectionCheckOutStartedEvent(ServerId)
ConnectionReadyEvent(ConnectionId)
ServerHeartbeatFailedEvent(ConnectionId, long, Throwable)
ServerHeartbeatSucceededEvent(ConnectionId, BsonDocument, long)
从
WriteConcernError
类中删除errorLabels
选项。 其中包括addLabel()
和getErrorLabels()
方法以及包含errorLabels
参数的构造函数。 相反,您可以使用包含WriteConcernError
的MongoException
对象中包含的错误标签。从
com.mongodb.event
包中删除以下类:ConnectionAddedEvent
ConnectionPoolOpenedEvent
ConnectionRemovedEvent
ClusterListenerAdapter
ConnectionPoolListenerAdapter
ServerListenerAdapter
ServerMonitorListenerAdapter
该驾驶员还会从
ConnectionPoolListener
接口中删除以下相关方法:connectionAdded()
connectionPoolOpened()
connectionRemoved()
有关
com.mongodb.event
包的更多信息,请参阅API文档。
为
listCollections
命令添加authorizedCollection
选项。 这在MongoDatabase.listCollectionNames()
方法中引入了重大二进制更改。 此更改不需要对源代码进行任何更改,但您必须重新编译使用此方法的任何代码。删除与流接口相关的以下方法和类型:
MongoClientSettings.Builder.streamFactoryFactory()
方法。 请改用MongoClientSettings.Builder.transportSettings()
方法。MongoClientSettings.getStreamFactoryFactory()
方法。 请改用MongoClientSettings.getTransportSettings()
方法。NettyStreamFactoryFactory
类。 而是调用TransportSettings.nettyBuilder()
方法来创建NettyTransportSettings
对象。 然后,调用MongoClientSettings.Builder.transportSettings()
方法以应用设置。NettyStreamFactory
类。AsynchronousSocketChannelStreamFactory
类。AsynchronousSocketChannelStreamFactoryFactory
类。BufferProvider
接口。SocketStreamFactory
类。Stream
接口。StreamFactory
接口。StreamFactoryFactory
接口。TlsChannelStreamFactoryFactory
类。
服务器版本兼容性更改
服务器发布兼容性更改是对Kotlin Sync驾驶员的修改,停止支持一设立MongoDB Server版本。
该驱动程序在 MongoDB Server 版本的生命周期结束 (EOL) 后将停止支持。
要了解有关 MongoDB 支持 EOL 产品的更多信息,请参阅旧版支持政策。
服务器版本8.1 支持变更
您无法使用 3.x 版本的Kotlin Sync驾驶员连接到运行MongoDB Server v8.1 或更高版本的MongoDB 部署。从MongoDB Server v8.1 开始,buildinfo
命令需要身份验证,从而导致与 v3.x驾驶员。
驱动程序版本5.5 服务器支持变更
v5.5驾驶员不再支持MongoDB Server 4.0。要使用 v5.5驾驶员,您必须连接到MongoDB Server 4.2 或更高版本。要学习;了解如何升级MongoDB Server部署,请参阅MongoDB Server手册中的发布说明。
驱动程序版本5.2 服务器支持变更
v5.2驾驶员不再支持MongoDB Server 3.6。要使用 v5.2驾驶员,您必须连接到MongoDB Server 4.0 或更高版本。要学习;了解如何升级MongoDB Server部署,请参阅MongoDB Server手册中的发布说明。
驱动程序版本4.8 服务器支持变更
v4.8驾驶员不再支持MongoDB Server 3.4 及更早版本。要使用 v4.8驾驶员,您必须连接到MongoDB Server 3.6 或更高版本。要学习;了解如何升级MongoDB Server部署,请参阅MongoDB Server手册中的发布说明。