Overview
本页介绍了升级到新版本的C++驱动程序时必须对应用程序进行的更改。
升级前,请执行以下操作:
确保新的C++驾驶员版本与应用程序连接到的MongoDB Server版本以及编译应用程序时使用的C++标准版本兼容。有关版本兼容性信息,请参阅 兼容性。
在“重大更改”部分中,解决应用程序正在使用的驱动程序版本与计划升级版本之间发生的任何重大更改。
提示
为了确保在升级驾驶员版本时跨MongoDB Server版本的兼容性,请使用 Stable API。
重大更改的定义
注意
C++ 驱动程序遵循语义版本控制。驱动程序可能会在任何版本中破坏构建系统或包的兼容性。补丁版本可能会撤销意外的 API 破坏性变更。
有关更多信息,请参阅API和 ABI 版本控制。
重大更改是对从特定版本的驱动程序开始的约定或行为的更改。 如果在升级驱动程序之前未解决,此类更改可能会导致应用程序无法正常工作。
本部分中的破坏性变更 (breaking change) 按引入它们的驱动程序版本进行分类。升级驱动程序版本时,请解决当前版本和升级版本之间的所有破坏性变更 (breaking change)。
例子
升级到版本 4.0
如果您要将C++驱动程序从版本 3.x 升级到版本 4.0,解决针对版本 3.x 直至(包括)版本 4.0 列出的所有破坏性变更
重大更改的类型
新版本的C++驱动程序可能会引入以下类型的破坏性变更:
API更改涉及C++驱动程序库的API。这些更改伴随着 API 主要版本的提升。您可能需要在项目中编辑C++源代码以解决这些更改。
例子
删除函数
v1::func()的声明。 (为了实现 ABI 兼容性,仍提供该定义。)删除内联函数
v_noabi::func()。删除
v_noabi::func()。将
bsoncxx::foo的重新声明从v1::foo更改为v2::foo。 要继续使用旧接口,请将bsoncxx::foo限定为bsoncxx::v1::foo。
ABI 更改涉及C++驱动程序的 ABI。这些更改伴随着 ABI 版本提升,也可能伴随着 API 主要版本提升。您可能需要重新构建项目或编辑C++源代码以解决这些更改。
与
v_noabi命名空间中声明的实体对应的符号不支持 ABI 稳定性。 此类符号的重大更改不一定伴随着 ABI 版本提升。例子
删除导出的符号
v_noabi::func()。删除导出的符号
v1::func()。删除
v1::type的导出符号。
构建系统更改涉及C++驱动程序库的构建系统或打包。这些更改不一定伴随着 API 主要版本提升或 ABI 版本提升。要解决这些更改,您可能需要修改构建系统配置或更新项目的包或依赖管理设置。您可能还需要修改或重新构建C++源代码。
例子
删除
ENABLE_FOO配置变量。将
ENABLE_BAR配置变量的默认值从OFF更改为ON。删除支持平台 A、编译器 B 或架构C的支持。
重大更改
以下部分介绍了每个驱动程序版本发布引入的破坏性变更。
版本 4.1
v4.1 中的构建系统重大更改
v4.1 驱动程序向构建系统引入了以下破坏性变更:
需要MongoDB C驱动程序v 2.0.0或更高版本
对于自动下载版本的 C 驱动程序,默认将
ENABLE_TESTS配置选项设置为OFF。这是 v4.0 中所做更改的扩展。
v4.1 中的 ABI 重大更改
v4.1 驱动程序引入了以下对 ABI 的破坏性变更:
在
bsoncxx::v1::stdx命名空间中为optional<T>和string_view声明C++ 17 polyfill 实现。bsoncxx::v_noabi::stdx命名空间现在包含其 v1 等效项的类型别名。注意
这不会影响使用C++17 或更高版本进行编译且未设立
BSONCXX_POLY_USE_IMPLS=ON
版本 4.0
v4.0 中的构建系统重大更改
v4.0 驱动程序向构建系统引入了以下破坏性变更:
删除对 Boost 和 MNMLSTC/core 外部 polyfill 库的支持。 您不能再设立以下配置选项:
ENABLE_BSONCXX_POLY_USE_IMPLS。此选项隐式设立为ON。BSONCXX_POLY_USE_MNMLSTC.BSONCXX_POLY_USE_SYSTEM_MNMLSTC.BSONCXX_POLY_USE_BOOST.
删除对
MONGOCXX_OVERRIDE_DEFAULT_INSTALL_PREFIX配置选项的支持。 现在,CMAKE_INSTALL_PREFIX的默认 CMake 行为受到尊重。
默认将
ENABLE_TESTS配置选项设置为OFF。 要重新启用构建测试目标,您必须将ENABLE_TESTS设立为ON。 要在“all”目标中包含测试目标,还必须将BUILD_TESTING选项设立为ON。注意
此更改不适用于自动下载版本的C驱动程序。v4.1 中添加了针对自动下载版本的更改。
4.0 中的API重大更改
v4.0 驱动程序引入了以下对 API 的破坏性变更:
不再支持将
bsoncxx::stdx::string_view和bsoncxx::stdx::optional<T>配置为 Boost 或 MNMLSTC/core 库等效项的别名。 有关上下文,请参阅“构建系统重大更改”部分。删除以下头文件:
<bsoncxx/stdx/make_unique.hpp><bsoncxx/types/value.hpp><bsoncxx/util/functor.hpp><mongocxx/options/create_collection.hpp>
删除以下已弃用的具有
string等效项的utf8类型和函数:k_utf8来自bsoncxx::v_noabi::type类。 请改用k_string。b_utf8来自bsoncxx::v_noabi::types类。 请改用b_string。get_utf8()来自bsoncxx::v_noabi::document::element、bsoncxx::v_noabi::array::element和bsoncxx::v_noabi::types::bson_value::view类。 请改用get_string()。k_cannot_append_utf8来自bsoncxx::v_noabi::exception::error_code类。 请改用k_cannot_append_string。k_need_element_type_k_utf8来自bsoncxx::v_noabi::exception::error_code类。 请改用k_need_element_type_k_string。
删除
mongocxx::stdx命名空间空间。 在代码中替换以下类型:mongocxx::stdx::optional<T>。请改用bsoncxx::stdx::optional<T>。mongocxx::stdx::string_view。请改用bsoncxx::stdx::string_view。
删除以下未记录的
using指令和声明:bsoncxx::builder::types来自<bsoncxx/builder/list.hpp>头文件。 请改用<bsoncxx/types.hpp>中的bsoncxx::types。bsoncxx::builder::stream::concatenate来自<bsoncxx/builder/stream/helpers.hpp>头文件。 请改用<bsoncxx/builder/concatenate.hpp>中的bsoncxx::builder::concatenate。mongocxx::events::read_preference来自<mongocxx/events/topology_description.hpp>头文件。 请改用<mongocxx/read_preference.hpp>中的mongocxx::read_preference。
v4.0 中的 ABI 重大更改
v4.0 驱动程序引入了以下对 ABI 的破坏性变更:
版本 3.11
v3.11 中的构建系统重大更改
v3.11 驱动程序向构建系统引入了以下破坏性变更:
删除了对MongoDB Server v 3.6的支持。
需要MongoDB C驱动程序v 1.28.0或更高版本。
如果
ENABLE_TESTS配置选项设立为ON,则需要C++14 或更高版本。 您可以在 CMake 配置期间通过ENABLE_TESTS=OFF禁用测试,从而选择退出C++14 要求。
v3.11 中的 ABI 重大更改
v3.11 驱动程序引入了以下对 ABI 的破坏性变更:
删除 bsoncxx ABI 中以下私有成员函数的导出:
bsoncxx::v_noabi::types::bson_value::value::value(const uint8_t*, uint32_t, uint32_t, uint32_t) bsoncxx::v_noabi::types::bson_value::view::_init(void*) bsoncxx::v_noabi::types::bson_value::view::view(const uint8_t*, uint32_t, uint32_t, uint32_t) bsoncxx::v_noabi::types::bson_value::view::view(void*) 删除 mongocxx ABI 中以下私有成员函数的导出:
mongocxx::v_noabi::options::change_stream::as_bson() mongocxx::v_noabi::options::aggregate::append(bsoncxx::v_noabi::builder::basic::document&) mongocxx::v_noabi::options::index::storage_options() 使用 MSVC 编译时,使用
__cdecl声明所有导出函数符号。 如果您在构建项目时使用替代的默认调用约定,则这是一项 ABI破坏性变更 (breaking change)。
版本 3.10
v3.10 中的构建系统重大更改
v3.10 驱动程序向构建系统引入了以下破坏性变更:
不再支持调用
find_package(libbsoncxx)和find_package(libmongocxx)。 请改用find_package(bsoncxx)和find_package(mongocxx)。删除支持旧版 CMake包配置文件提供的
LIBBSONCXX_*和LIBMONGOCXX_*CMake 变量的支持。 请改用mongo::bsoncxx_*和mongo::mongocxx_*CMake 目标。删除了
BSONCXX_POLY_USE_STD_EXPERIMENTALCMake 选项,并删除了对选择实验性C++标准库作为 polyfill 选项的支持。
版本 3.9
v3.9 中的构建系统重大更改
v3.9 驱动程序引入了以下破坏性变更:
删除了对 CMake项目构建树中导出目标的支持
删除支持macOS 10.14 、macOS 10.15和Ubuntu 14.04的支持
需要MongoDB C驱动程序v 1.25.0或更高版本
需要 CMake v 3.15或更高版本才能支持
FetchContent模块
3.8及更早版本
对于 3.8 及更早版本的驱动程序,请参阅 GitHub 上每个发布的发布说明和关联的 JIRA 工单。