升级驱动程序版本
Overview
本页介绍了升级到新版本的C++驾驶员程序时必须对应用程序进行的更改。
升级前,请执行以下操作:
确保新的C++驾驶员版本与应用程序连接到的MongoDB Server版本以及编译应用程序时使用的C++标准版本兼容。 有关版本兼容性信息,请参阅 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.0
v 4.0 中的构建系统重大更改
v 4.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
。
v 4.0 中的API重大更改
v 4.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
。
v 4.0 中的 ABI 重大更改
v 4.0驾驶员对 ABI 进行了以下重大更改:
版本 3.11
v 3.11 中的构建系统重大更改
v 3.11驾驶员对构建系统进行了以下重大更改:
删除了对MongoDB Server v 3.6的支持。
需要MongoDB C驱动程序v 1.28.0或更高版本。
如果
ENABLE_TESTS
配置选项设立为ON
,则需要C++ 14 或更高版本。您可以在 CMake 配置期间通过ENABLE_TESTS=OFF
禁用测试,从而选择退出C++ 14 要求。
v 3.11 中的 ABI 重大更改
v 3.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
v 3.10 中的构建系统重大更改
v 3.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_EXPERIMENTAL
CMake 选项,并删除了对选择实验性C++标准库作为 polyfill 选项的支持。
版本 3.9
v 3.9 中的构建系统重大更改
v 3.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 票证Github