了解以下版本中的新功能:
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.MongoDatabaseorg.mongodb.scala.MongoDatabasecom.mongodb.kotlin.client.MongoDatabasecom.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.BuildergetStreamFactoryFactory()方法来自MongoClientSettingsNettyStreamFactoryFactoryclassNettyStreamFactoryclassAsynchronousSocketChannelStreamFactoryclassAsynchronousSocketChannelStreamFactoryFactoryclassBufferProviderclassSocketStreamFactoryclassStreamclassStreamFactoryclassStreamFactoryFactoryclassTlsChannelStreamFactoryFactoryclass
如果使用
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的错误。在轮换使用 Google Cloud Key Management Service 或 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-coreOSGi 包中删除了对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类中将
ObjectIdBSON值表示为String增加了 Filters.empty() 方法
4.1 中的新增功能
4.1 版 Java 驱动程序的新增功能包括:
在计划维护事件期间,客户感知到的故障转移时间显著减少
find()方法支持 allowDiskUse(),用于需要过多内存才能在 RAM 中执行的排序。增加了对使用 Amazon Web Services (AWS) 身份和访问管理 (IAM) 凭证的 MONGODB-AWS 身份验证机制的支持
身份验证需要减少往返服务器的次数,从而加快连接设置
4.0 中的新增功能
此版本未添加任何新功能。