了解以下版本中的新功能:
5.0 中的新增功能
警告
此版本中的弃用内容
为避免驱动程序的未来主要版本发生破坏性变更 (breaking change),请替换任何依赖于已弃用程序元素的应用程序代码。
本部分包括以下信息:
5.0 中的弃用内容
org.mongodb.scala.Observable.completeWithUnit()
方法已弃用。 此方法不再有用,因为驱动程序现在公开org.mongodb.scala.Observable[Unit]
而不是org.mongodb.scala.Observable[Void]
。 这与此版本中可观察到的一项破坏性变更 (breaking change)有关。
5.0 中的行为变更
com.mongodb.event.ConnectionReadyEvent
上的getElapsedTime()
方法包括交付ConnectionCreatedEvent
所需的时间。 也就是说,返回的时间包括com.mongodb.event.ConnectionPoolListener.connectionCreated()
方法的持续时间。com.mongodb.event.ConnectionCheckedOutFailedEvent
和com.mongodb.event.ConnectionCheckedOutEvent
上的getElapsedTime()
方法包括传送com.mongodb.event.ConnectionCheckOutStartedEvent
所需的时间。 也就是说,返回的时间包括com.mongodb.eventConnectionPoolListener.connectionCheckOutStarted()
方法的持续时间。
5.0 中的新功能
5.0 驱动程序版本引入了以下功能:
添加对
listCollections
命令的authorizedCollection
选项的支持。 这是通过更改com.mongodb.client.MongoDatabase.listCollectionNames()
方法来实现的。 返回类型现在为com.mongodb.client.ListCollectionNamesIterable
,而以前是MongoIterable<String>
。 此更改允许使用ListCollectionNamesIterable.authorizedCollections()
方法并指定authorizedCollections
选项来配置返回值。 对以下类和接口进行了等效更改:com.mongodb.reactivestreams.client.MongoDatabase
org.mongodb.scala.MongoDatabase
com.mongodb.kotlin.client.MongoDatabase
com.mongodb.kotlin.client.coroutine.MongoDatabase
这些更改对 listCollectionsNames() 方法引入了二进制重大更改。 有关
MongoDatabase.listCollectionNames()
方法和authorizedCollections
选项的更多信息,请参阅listCollections MongoDB Server手册页或获取集合列表。
4.11 中的新增功能
本部分包括以下信息:
4.11 中的弃用
警告
此版本中的弃用内容
为避免驱动程序未来的主要版本出现破坏性更改,请替换任何依赖于弃用方法和类型的应用程序代码。
4.11 版驱动程序已弃用以下内容:
DBCollection
类的getStats()
和isCapped()
实例方法已被弃用。相应的服务器命令在 MongoDB v6.2 及更高版本中已弃用。请改用$collStats
聚合管道阶段来检索这些方法提供的信息。您可以按照以下代码示例所示运行聚合:Cursor cursor = collection.aggregate(Arrays.asList( new BasicDBObject("$collStats", new BasicDBObject("storageStats", new BasicDBObject()))), AggregationOptions.builder().build() ); 要确定集合是否为上限集合,请访问前面示例聚合中的
Cursor
实例返回的storageStats.capped
字段的值。如需了解有关
$collStats
聚合操作符的更多信息,请参阅“$collStats(聚合)服务器”手册条目。以下与网络地址相关的方法已弃用,并将在 v5.0 中删除:
ServerAddress 方法
getSocketAddress()
和getSocketAddresses()
。使用
java.net.InetAddress
的getByName()
实例方法,而不是getSocketAddress()
。使用
java.net.InetAddress
的getAllByName()
实例方法,而不是getSocketAddresses()
。UnixServerAddress 方法
getUnixSocketAddress()
。构建
jnr.unixsocket.UnixSocketAddress
实例,而不是getUnixSocketAddress()
。将 UNIX 套接字文件的完整路径传递给构造函数。默认情况下,MongoDB 会创建位于"/tmp/mongodb-27017.sock"
的 UNIX 套接字文件。要了解有关UnixSocketAddress
的详情,请参阅 UnixSocketAddress API 文档。
以下与StreamFactory接口相关的方法和类型已弃用,并计划在 v5.0 中删除:
streamFactoryFactory()
方法来自MongoClientSettings.Builder
getStreamFactoryFactory()
方法来自MongoClientSettings
NettyStreamFactoryFactory
classNettyStreamFactory
classAsynchronousSocketChannelStreamFactory
classAsynchronousSocketChannelStreamFactoryFactory
classBufferProvider
classSocketStreamFactory
classStream
classStreamFactory
classStreamFactoryFactory
classTlsChannelStreamFactoryFactory
class
如果使用
MongoClientSettings.Builder.streamFactoryFactory()
来配置 Netty,则代码可能如下所示:import com.mongodb.connection.netty.NettyStreamFactoryFactory; // ... MongoClientSettings settings = MongoClientSettings.builder() .streamFactoryFactory(NettyStreamFactoryFactory.builder().build()) .build(); 将此代码替换为 TransportSettings.nettyBuilder(),如下例所示:
import com.mongodb.connection.TransportSettings; // ... MongoClientSettings settings = MongoClientSettings.builder() .transportSettings(TransportSettings.nettyBuilder().build()) .build();
4.11 中的新增功能
4.11 版驱动程序的新增功能包括:
支持使用 SOCKS5 代理连接到 MongoDB。要了解详情,请参阅使用 SOCKS5 代理连接到 MongoDB。
修复了使用代理功能时如何验证域名的相关问题,允许您在顶级域中使用六个字符以上的域名。
向
ChangeStreamDocument
类添加getSplitEvent()
方法,从而识别超过 16 MB 的变更流事件的片段。您必须在变更流中使用聚合阶段$changeStreamSplitLargeEvent
来处理超过 16 MB 的事件。要了解详情,请参阅分割大型变更流事件。已为
$vectorSearch
添加了聚合阶段构建器。要了解详细信息,请参阅 Atlas Vector Search。添加了 Atlas Search 索引管理助手。如需了解更多信息,请参阅“Atlas Search 索引”。
更新了 Snappy 和 Zstd 压缩库依赖项版本。要了解有关当前依赖项版本的更多信息,请参阅网络压缩。
为以下类添加
getElapsedTime()
方法,以监控连接池事件的持续时间:支持 Java 21 虚拟线程和结构化并发。驱动程序内部结构已更新,以避免不必要地虚拟线程绑定,并保留线程中断状态,后者对于用于取消的结构化并发很重要。
要了解有关虚拟线程的详细信息,请参阅虚拟线程 JDK 增强提案。要了解有关结构化并发的详细信息,请参阅结构化并发 JDK 增强提案。
已更新以下类型的 API 文档:
4.10 中的新增功能
4.10 版驱动程序的新增功能包括:
实现统计聚合的
Accumulators.percentile()
和Accumulators.median()
方法。com.mongodb.client.model.search
包中的接口现在标记为@Sealed
,而不是@Evolving
。密封接口不得由库的用户扩展或实现。解决了驱动程序为重试操作发出重复日志消息的问题。驱动程序现在为每个重试操作正确发出一条日志消息。
org.bson.codecs.Parameterizable
接口已弃用。如果解码器适用于参数化类型,请重写编解码器的CodecProvider
上的CodecProvider.get()
方法,而不是在自定义Codec
类型上实现此接口。支持自定义 DNS 解析程序。
支持可查询加密 (QE)。要详细了解使用 QE 功能的要求,请参阅可查询加密驱动程序兼容性表。
4.9 的新增功能
4.9 版驱动程序的新增功能包括:
新增一个新的异常来识别以下情况:
BsonCreator
所注解的构造函数包含的参数附带除BsonProperty
或BsonId
之外的注释。更改了
org.mongodb.driver.protocol.command
程序包报告的命令监控信息的日志信息格式。“聚合”辅助工具类型中添加了对
$documents
聚合管道阶段的支持。增加了 MongoClientSettings.Builder.applyToLoggerSettings() 和 LoggerSettings.Builder.maxDocumentLength() 方法,允许您在日志消息中指定 BSON 文档的扩展 JSON 表示形式的最大长度。
4.8 中的新增功能
重要
弃用通知
MapCodec
和IterableCodec
类已弃用。 MapCodec
使用MapCodecProvider
,而不是 。对于不是IterableCodec
Collection
类型的Iterable
类型,请使用CollectionCodecProvider
或IterableCodecProvider
,而不是 。
4.8 驱动程序版本的行为更改包括:
如果您的应用程序在 OSGi 容器中部署驱动程序并依赖该驱动程序来编码和解码 Java 记录,则要求您添加对
org.bson.codecs.record
模块的显式依赖项。在
DEBUG
级而不是INFO
级记录新连接信息。
4.8 驱动程序版本的新功能包括:
支持使用 AWS 进行身份验证。该驱动程序对 AWS SDK 版本 1 和版本 2 具有可选依赖项。
支持从环境中获取 GCP 和 Azure 的档案,以用于正在使用的加密。
支持对包含具有通用参数的组件的记录进行反序列化。
支持对包含更具体容器类型(例如
SortedSet
、NavigableMap
、LinkedList
或TreeSet
)的组件的记录进行反序列化。支持递归记录类型,即其类型定义包含周期的记录。
在MongoDB v6.1 及更高版本上启用
showExpandedEvents
服务器功能时,在变更流更新事件中包含disambiguatedPaths
字段。有关此字段的了解详情getDisambiguatedPaths() API文档。有关showExpandedEvents
设置的了解详情扩展事件服务器文档。
4.7.1 中的新增功能
4.7.1驾驶员修复了影响客户端字段级加密和Queryable Encryption的错误。在轮换使用GCP KMS或Azure Key Vault上托管的客户主密钥加密的数据加密密钥 (DEK) 时,该错误可能会导致数据损坏。 该错误存在于 RewrapManyDataKey
方法中驾驶员4.7.0 版本中,会导致您的 DEK 丢失。
重要
备份密钥保管库集合
轮换 DEK 之前,请务必备份密钥保管库集合。如果丢失了 DEK,则无法访问使用这些密钥加密的所有数据。
4.7 中的新增功能
4.7 版驱动程序的新增功能包括:
已添加对 MongoDB 6.0 的全面支持。
添加了以下变更流支持改进:
已添加集群索引创建支持。
支持与Queryable Encryption相关的新功能,包括支持自动加密(MongoDB v 6.0 Enterprise 或更高版本)和手动加密。
支持新的Queryable Encryption共享库,从而不再需要
mongocryptd
进程。Queryable Encryption共享库需要 org.mongodb:mongodb-crypt1.5.1.1
或更高版本。
为加密密钥管理添加了新的 API。
为更多聚合阶段新增了构建器 API 方法,其中包括
$search
/$searchMeta
(仅限 Atlas)、$densify
和$fill
。您可以通过聚合构建器页面了解这些方法的更多信息。添加了可用于 POJO 编码和解码的
BsonExtraElements
注解。BsonExtraElements
可对将来可能接收新字段的对象进行解码,而无需开发者显式映射这些新字段。性能优化包括:
服务器会话池和缓冲池的无锁实现。
新的
DBCursor
清理实现,使用 Java 的 Cleaner API 而不是 finalization,在 Java 9 或更高版本中可用。
setWindowFields 生成器 API 不再是测试版功能。更改 API 会破坏二进制和源代码的兼容性。有关详情,请参阅版本 4.7 重大更改。
4.6 的新增功能
4.6 版 Java 驱动程序的新增功能包括:
缓冲池现在由所有
MongoClient
实例共享。缓冲池会清除闲置一分钟的缓冲区。增加了一个 API,用于为客户端字段级加密 (CSFLE) 的 AWS KMS 凭证指定提供程序。请参阅 AutoEncryptionSettings.Builder.kmsProviderPropertySuppliers() 和 ClientEncryptionSettings.Builder.kmsProviderPropertySuppliers() API 文档以了解更多信息。
为 CSFLE 的依赖项
org.mongodb:mongodb-crypt
添加了对基于 ARM 的 Apple M1 硬件的兼容性。添加了服务提供商接口 (SPI),允许驱动程序指定自定义 DNS 客户端。有关更多信息,请参阅 DnsClient 和 DnsClientProvider 接口 API 文档。
为 Java 记录和 BSON 文档之间的编码和解码添加了驱动程序支持,默认情况下已启用。如需了解更多信息,请参阅“文档数据格式:记录”。
4.5.1 中的新增功能
如果 DNS 服务器返回 NXDomain 错误,则表示不存在某个域,因而 4.5.1 驱动程序不再引发异常。
4.5 中的新增功能
4.5 版 Java 驱动程序的新增功能包括:
已添加对指定 SRV 资源记录自定义服务名称的支持。如需了解更多信息,请参阅“连接选项”指南中的
srvServiceName
设置。增加了对使用
CodecRegistries.withUuidRepresentation()
方法在编解码器注册表中自定义 UUID 表示形式的支持。已添加在
ClusterSettings
、ServerSettings
和ConnectionPoolSettings
生成器中覆盖监听器设置的支持。现在,当不同 MongoClient 实例不共享监听器时,
ClusterListener
、ServerListener
和ServerMonitorListener
收到的所有事件都会使用 happens-before 关系完全排序。如需了解有关 happens-before 排序的更多信息,请参阅“Java 语言规范”中的“Happens-before 排序”。已添加
EnumCodec
和EnumCodecProvider
类,将enum
类型的编解码器支持从PojoCodec
类中分离出来。您可以从MongoClientSettings
和Bson
接口访问的默认编解码器注册表现在包含enum
编解码器类。如果应用程序使用自定义枚举编解码器和默认注册表之一,请务必按照覆盖编解码器部分中的说明对它们进行排序。解决了影响 4.4 和 4.3 版驱动程序的性能问题。该版本的性能与 4.2 版类似。
已解决因检索集群描述而产生的错误未传递至
onError
订阅者回调的问题解决了启用压缩后连接时释放
ByteBuf
实例的问题。从
org.mongodb.driver-core
OSGi 包中删除了对javax.annotation.*
包的不必要依赖。
4.4 中的新增功能
4.4 版 Java 驱动程序的新增功能包括:
与 MongoDB 5.1 兼容并支持 Java 17
已在下列位置添加对索引提示的支持:
AggregateIterable
增加了对从节点上
$merge
和$out
聚合阶段的支持在
Updates
构建器中使用mergeObjects()
方法DocumentCodec
在写入Iterable
或Map
实例时不会忽略 CodecRegistry
4.3 的新增功能
4.3 版 Java 驱动程序的新增功能包括:
已添加对 MongoDB 稳定版 API 的支持。如需了解更多信息,请参阅我们的“稳定版 API”指南。
注意
从 2022 年 2 月开始,版本化 API 被称为 Stable API。此次命名更改后,所有概念和功能均保持不变。
添加了对连接到MongoDB Atlas无服务器实例的支持。 有关设置的更多信息,请参阅有关如何创建新的无服务器实例的文档
为
setWindowFields
管道阶段添加了生成器 API,允许使用窗口操作符添加了对设置 Netty io.netty.handler.ssl.SslContext 的支持
添加了支持快照读取
ClientSession
限制每个连接池建立新连接的速度
删除了对插入或替换文档字段名中允许字符的大部分限制。对于任何依赖项客户端执行这些限制的应用程序来说,这都是一种行为更改。
下表显示了文档字段名称中允许使用的字符的限制状态:
字符 | 操作 | 说明 |
---|---|---|
. | 插入和替换 | 删除了对包含此字符的字段名称的限制。 |
$ | Insert | 删除了对以此字符开头的字段名称的限制。 |
$ | 替换 | 已删除嵌套文档中对包含此字符的字段名称的限制。 |
$ | 替换 | 保持顶层文档中对以此字符开头的字段名称的限制。这样可以防止在打算使用更新操作时意外使用替换操作。 |
注意
使用美元前缀或虚线键进行的未确认写入可能会被 5.0 之前的版本静默拒绝 服务器,对字段名称的某些限制仍然在服务器中执行。
4.2 的新增功能
4.2 版 Java 驱动程序的新增功能包括:
向客户端字段级加密添加 Azure 与 GCP 密钥存储库
添加了 Kerberos 缓存票证,以便在多个身份验证请求中重复使用
添加了使用
MongoClientSettings
或ConnectionString
作为配置的 MongoClients 实例添加了 JsonObject 类,通过避免中间的 Map 表示,使 JSON 的编码和解码更加高效
添加了BsonRepresentation注解,允许您在POJO类中将
ObjectId
BSON值表示为String
增加了 Filters.empty() 方法
4.1 中的新增功能
4.1 版 Java 驱动程序的新增功能包括:
在计划维护事件期间,客户感知到的故障转移时间显著减少
find()
方法支持 allowDiskUse(),用于需要过多内存才能在 RAM 中执行的排序。增加了对使用 Amazon Web Services (AWS) 身份和访问管理 (IAM) 凭证的 MONGODB-AWS 身份验证机制的支持
身份验证需要减少往返服务器的次数,从而加快连接设置
4.0 中的新增功能
此版本未添加任何新功能。