文档菜单
文档首页
/ / /
Java 同步驱动程序

新增功能

本页内容

  • 5.2 版本新增功能
  • 5.1.3 版本新增功能
  • 5.1.2 版本新增功能
  • 5.1.1 版本新增功能
  • 5.1 版本新增功能
  • 5.0 版本新增功能
  • 4.11 版本新增功能
  • 4.10 版本新增功能

了解

  • 5.2 版本

  • 5.1.3 版本

  • 5.1.2 版本

  • 5.1.1 版本

  • 5.1 版本

  • 5.0 版本

  • 4.11 版本

  • 4.10 版本

重要

停止支持 MongoDB Server 3.6

Java 驱动程序 v5.2 停止支持 MongoDB Server 3.6。有关兼容服务器版本的更多信息,请参阅兼容性.

5.2 驱动程序版本包括以下更改、修复和功能

  • 连接 URI 中主机名和客户端选项之间的反斜杠 (/) 字符是可选的。驱动程序以相同的方式解析以下连接 URI 示例/ 字符在连接 URI 的主机名和客户端选项之间是可选的。驱动程序以相同的方式解析以下连接 URI 示例

    // Connection URI with delimiting forward-slash
    String uri = "mongodb://example.com/?w=majority";
    // Connection URI without delimiting forward-slash
    String uri = "mongodb://example.com?w=majority";
  • 添加了 SearchIndexType 类,您可以在构造 SearchIndexModel 实例时传递它。此更改允许您在创建 Atlas Search 或 Vector Search 索引时指定索引类型。有关更多信息,请参阅索引指南中的 Atlas Search 和 Vector Search Indexes.

  • 将实现 SCRAM-SHA-1SCRAM-SHA-256 认证机制的算法的实现委托给配置的 JCA 提供商。此更改意味着您的应用程序可以使用配置的符合 FIPS 标准的 JCA 提供商提供更高级别的安全性。

  • 修订了 mongodb-crypt 依赖项的版本管理,以匹配 JVM 驱动程序的版本管理。将来的 mongodb-crypt 版本将与驱动程序一起发布,并共享相同的版本号。您必须将您的 mongodb-crypt 依赖项升级到 v5.2.0,才能升级到此版本的驱动程序。有关更多信息,请参阅正在使用的加密指南.

  • 由于在所有支持的平台上都实现了本地加密,性能得到了提升。以下列表描述了根据您的操作系统实施此改进所需采取的操作。

    • Windows:将您的 mongodb-crypt 版本升级到 v5.2.0。

    • Mac:将您的 mongodb-crypt 版本升级到 v5.2.0。

    • Linux:直接在文件系统上安装 libmongocrypt.so,而不是使用 mongodb-crypt JAR 文件中捆绑的文件。您可以在服务器手册中找到安装 libmongocrypt 的 Linux 说明。如果您使用包管理器安装 libmongocrypt,Java 本地访问 (JNA) 将在没有进一步配置的情况下在那里找到它。或者,您可以通过设置 LD_LIBRARY_PATH 环境变量为 libmongocrypt 包的文件路径来指定搜索路径。

      我们建议直接安装,因为捆绑的共享库由于 OpenSSL 二进制不兼容的可能性而没有与 OpenSSL 链接。

      共享库加载由 JNA 处理。您可以在NativeLibrary 类文档中查看库加载搜索路径顺序的规则。

  • 修复了导致 InsertOneResult.getInsertedId()InsertManyResult.getInsertedIds() 方法在某些情况下返回不正确文档 ID 的问题。此更改已回滚到 Java 驱动程序 v5.1.4 和 v4.11.4。

  • 当分片集群操作失败时,如果其他 mongos 服务器可用,驱动程序会避免选择相同的 mongos 服务器进行操作重试尝试。

  • 添加了当您的应用程序使用 GraalVM 本地图像时所需的可达性元数据。此元数据替换了使用驱动程序库时收集可达性元数据的需求。有关更多信息,请参阅 GraalVM 文档中的可达性元数据

    此更改不会添加 libjnidispatchlibmongocrypt 资源条目,因为为所有支持的平台(目标)添加条目会显著影响使用 GraalVM Native Image 构建的本地可执行文件的大小。请查看驱动 GitHub 仓库中的此样本 resource-config.json 文件,了解如何在应用程序依赖于 org.mongodb:mongodb-crypt 库的情况下显式指定这些条目。

  • 通过扩展 VectorSearchOptions API 来启用精确向量搜索,引入以下特定选项子类型

    • ExactVectorSearchOptions:使用此选项类型以启用精确匹配,确保结果是与给定查询向量最接近的向量。

    • ApproximateVectorSearchOptions:使用此选项类型以启用可能不会返回精确最接近向量的搜索。在实例化此类型时,您可以传递一个 numCandidates 参数以指定要考虑的最近邻数量。

    有关使用 Atlas 向量搜索功能的更多信息,请参阅聚合构建器指南中的 Atlas 向量搜索.

5.1.3 驱动器修补版本包含以下更改

  • 修复了在使用 Cursor 类型时可能导致断言错误的问题。

5.1.2驱动程序补丁版本包括以下更改

  • 修复了一个问题,该问题阻止驱动程序对指定基类作为MongoCollection实例泛型类型的情况进行具体类的编码和解码。

  • 修复了一个与使用SOCKS5代理功能时验证域名相关的问题,允许您使用顶级域名超过六个字符的域名。

5.1.1驱动程序补丁版本包括以下更改

  • 当使用MONGODB-OIDC身份验证机制时,不要在authMechanismProperties连接字符串值中包含逗号字符。有关此行为的更多信息,请参阅企业身份验证指南中的MONGODB-OIDC部分。

  • 通过删除冗余的字节数组克隆优化GridFS吞吐量。GridFSDownloadStream和GridFSUploadStream类型使用BsonDocument类型而不是Document。

警告

本版本中的弃用功能

为了避免在驱动程序的下一个主要版本中引入破坏性变更,请替换所有依赖于已弃用程序元素的应用程序代码。

本节包括以下信息

  • 对MongoDB服务器v3.6的支持已弃用,将在下一个驱动程序版本中删除。有关如何升级MongoDB服务器部署的说明,请参阅MongoDB服务器手册中的发行说明

  • 对GraalVM原生图像技术的内部测试。这些测试涉及使用GraalVM native-image工具构建原生应用程序。

  • 增强了对MONGODB-OIDC身份验证机制的支持。有关OIDC的更多信息,请参阅企业身份验证机制指南中的MONGODB-OIDC部分。

  • 引入了 serverMonitoringMode 连接 URI 选项。有关此选项的更多信息,请参阅连接选项指南。

警告

本版本中的重大变更

本驱动程序版本引入了重大变更。有关这些变更的列表,请参阅升级指南中的5.0版重大变更部分

警告

本版本中的弃用功能

为了避免在驱动程序的下一个主要版本中引入破坏性变更,请替换所有依赖于已弃用程序元素的应用程序代码。

本节包括以下信息

  • org.mongodb.scala.Observable.completeWithUnit() 方法已弃用。此方法不再有用,因为驱动程序现在公开了 org.mongodb.scala.Observable[Unit] 而不是 org.mongodb.scala.Observable[Void]。这涉及到本发行版关于 Observables 的重大变更

  • getElapsedTime() 方法在 com.mongodb.event.ConnectionReadyEvent 上包括交付 ConnectionCreatedEvent 所花费的时间。也就是说,返回的时间包括 com.mongodb.event.ConnectionPoolListener.connectionCreated() 方法所持续的时间。

    getElapsedTime() 方法在 com.mongodb.event.ConnectionCheckedOutFailedEventcom.mongodb.event.ConnectionCheckedOutEvent 上包括交付 com.mongodb.event.ConnectionCheckOutStartedEvent 所花费的时间。也就是说,返回的时间包括 com.mongodb.eventConnectionPoolListener.connectionCheckOutStarted() 方法所持续的时间。

5.0版本的驱动程序发布引入了以下功能

  • 增加了对 authorizedCollection 选项的支持,该选项用于 listCollections 命令。这是通过更改 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服务器手册页面或获取集合列表。

注意

v5.0.2补丁版本修复了在使用SOCKS5代理功能时域名验证相关的问题,允许您使用顶级域名中超过六个字符的域名。

本节包括以下信息

警告

本版本中的弃用功能

为了避免在驱动程序的后续主要版本中发生不兼容更改,请替换任何依赖于已弃用方法和类型的应用程序代码。

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 (aggregation) 服务器手册条目。

  • 以下与网络地址相关的函数已弃用,将在 v5.0 版本中删除。

    • ServerAddress 方法 getSocketAddress()getSocketAddresses()

      代替 getSocketAddress(),使用 java.net.InetAddressgetByName() 实例方法。

      代替 getSocketAddresses(),使用 java.net.InetAddressgetAllByName() 实例方法。

    • UnixServerAddress 方法 getUnixSocketAddress()

      不要使用getUnixSocketAddress(),而是构建一个jnr.unixsocket.UnixSocketAddress实例。将UNIX套接字文件的完整路径传递给构造函数。默认情况下,MongoDB创建的UNIX套接字文件位于"/tmp/mongodb-27017.sock"。要了解更多关于UnixSocketAddress的信息,请参阅UnixSocketAddress API文档。

  • StreamFactory接口相关的方法和类型已在v5.0版本中弃用,并计划删除

    • streamFactoryFactory()方法,来自MongoClientSettings.Builder

    • getStreamFactoryFactory()方法,来自MongoClientSettings

    • NettyStreamFactoryFactory

    • NettyStreamFactory

    • AsynchronousSocketChannelStreamFactory

    • AsynchronousSocketChannelStreamFactoryFactory

    • BufferProvider

    • SocketStreamFactory

    • Stream

    • StreamFactory

    • StreamFactoryFactory

    • TlsChannelStreamFactoryFactory

    如果你通过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驱动程序版本的新特性包括

注意

v4.11.3补丁版本修复了与使用SOCKS5代理功能时域名验证相关的问题,允许您使用包含超过六个字符的顶级域名的域名。

  • ChangeStreamDocument类添加了getSplitEvent()方法,以识别超出16MB的更改流事件的片段。您必须在更改流中使用聚合阶段$changeStreamSplitLargeEvent来处理超出16MB的事件。欲了解更多信息,请参阅拆分大型更改流事件。

  • 添加了针对$vectorSearch的聚合阶段构建器。欲了解更多信息,请参阅Atlas Vector Search。

  • 添加了Atlas Search索引管理辅助工具。欲了解更多信息,请参阅Atlas Search Indexes。

  • 更新了 Snappy 和 Zstd 压缩库依赖版本。要了解当前依赖版本,请参阅网络压缩。

  • 向以下类添加了 getElapsedTime() 方法以监控连接池事件的持续时间

  • 支持 Java 21 虚拟线程和结构化并发。更新了驱动内部结构,以避免对虚拟线程不必要的锁定,并保留线程的中断状态,因为在结构化并发中,中断状态对于取消操作至关重要。

    要了解有关虚拟线程的更多信息,请参阅虚拟线程 JDK 增强提案。要了解有关结构化并发的更多信息,请参阅结构化并发 JDK 增强提案。

  • 更新了以下类型的 API 文档

4.10 驱动版本的新特性包括

  • 实现了统计聚合的Accumulators.percentile()Accumulators.median()方法。

  • com.mongodb.client.model.search包中的接口现在被标记为@Sealed而不是@Evolving。Sealed接口不应被库的消费者扩展或实现。

  • 解决了驱动程序在重试操作中发出重复日志消息的问题。现在驱动程序为每个重试操作正确发出一条日志消息。

  • org.bson.codecs.Parameterizable接口已弃用。对于参数化类型,不再在自定义Codec类型上实现此接口,而是覆盖codec的CodecProvider.get()方法。

  • 支持自定义DNS解析器。

  • 支持可查询加密(QE)。有关使用QE功能的要求数据,请参阅可查询加密驱动程序兼容性表

返回

快速参考