Overview
Esta página describe los cambios que debes hacer en tu aplicación cuando actualices a una nueva versión del driver de C++.
Antes de actualizar, realiza las siguientes acciones:
Asegúrese de que la nueva versión del controlador de C++ sea compatible con las versiones de MongoDB Server a las que se conecta su aplicación y con la versión estándar de C++ con la que compila su aplicación. Para obtener información sobre la compatibilidad de versiones, consulte Compatibilidad.
Resuelva cualquier cambio disruptivo entre la versión del driver que utiliza su aplicación y la versión de actualización planificada en la sección Cambios disruptivos.
Tip
Para garantizar la compatibilidad entre las versiones del MongoDB Server al actualizar las versiones del driver, use el Stable API.
Definición de cambios importantes
Nota
El driver de C++ sigue el versionado semántico. El driver podría romper la compatibilidad del sistema de compilación o del paquete en cualquier versión. Los lanzamientos de parches podrían revertir cambios disruptivos accidentales de la API.
Para obtener más información,consulte Versiones de API y ABI.
Un cambio disruptivo es un cambio en una convención o comportamiento que empieza a partir de una versión específica del driver. Este tipo de cambios puede evitar que tu aplicación funcione correctamente si no se abordan antes de actualizar el controlador.
Los cambios disruptivos en esta sección se categorizan según la versión del driver que los ha introducido. Al actualizar las versiones del driver, debes abordar todos los cambios disruptivos entre la versión actual y la versión de actualización.
Ejemplo
Actualización a la versión 4.0
Si estás actualizando el driver de C++ de la versión 3.x a la versión 4.0, atiende todos los cambios disruptivos que se enumeran para las versiones 3.x hasta e incluyendo la versión 4.0
Tipos de cambios disruptivos
Nuevas versiones del controlador C++ pueden introducir los siguientes tipos de cambios disruptivos:
Los cambios en la API afectan a la API de las bibliotecas de controladores de C++. Estos cambios vienen acompañados de una actualización de la versión principal de la API. Es posible que deba editar el código fuente de C++ en su proyecto para abordar estos cambios.
Ejemplo
Remueve la declaración de la función
v1::func(). (La definición sigue proporcionándose para compatibilidad con ABI).Elimina la función en línea
v_noabi::func().Remueve
v_noabi::func().Cambia la redeclaración de
bsoncxx::foodev1::fooav2::foo. Para continuar usando la antigua interfaz, califiquebsoncxx::foocomobsoncxx::v1::foo.
Los cambios en ABI afectan al ABI de las librerías controladoras de C++. Estos cambios se acompañan de un aumento de la versión ABI y también pueden ir acompañados de un aumento de la versión principal de la API. Es posible que necesite reconstruir su proyecto o editar su código fuente de C++ para abordar estos cambios.
La estabilidad de la ABI no está soportada para los símbolos que corresponden a entidades declaradas en el espacio de nombres
v_noabi. Los cambios disruptivos para tales símbolos no están necesariamente acompañados de una actualización de versión de ABI.Ejemplo
Remueve el símbolo exportado
v_noabi::func().Remueve el símbolo exportado
v1::func().Elimina los símbolos exportados para
v1::type.
Los cambios en elsistema de compilación afectan al sistema de compilación o al empaquetado de las bibliotecas de controladores de C++. Estos cambios no necesariamente van acompañados de una actualización de la versión principal de la API ni de la versión de la ABI. Para solucionarlos, es posible que deba modificar la configuración de su sistema de compilación o actualizar la configuración de gestión de paquetes o dependencias de su proyecto. También podría ser necesario modificar o reconstruir su código fuente de C++.
Ejemplo
Elimina la variable de configuración
ENABLE_FOO.Cambia el valor por defecto de la variable de configuración
ENABLE_BARdeOFFaON.Deja de admitir la compatibilidad con la plataforma A, el compilador B o la arquitectura C.
Cambios radicales
Las siguientes secciones describen los cambios disruptivos introducidos por cada versión del driver.
Versión 4.2
Cambios disruptivos en el sistema de compilación en la vers. 4.2
El controlador v4.2 introduce los siguientes cambios disruptivos en el sistema de compilación:
Deja de ser compatible con macOS 11 y macOS 12.
Cambios disruptivos en la ABI en la versión4.2
El driver v4.2 introduce los siguientes cambios disruptivos en la ABI:
La ABI estable del controlador C++ está disponible para uso experimental. Como parte de este cambio, se introdujeron cambios importantes que afectan a la ABI inestable. Al4.2 actualizar a la versión 7600 del controlador, recomendamos migrar a la ABI estable (versión1.0 7800) en su aplicación.
La ABI estable no debería introducir cambios incompatibles con la API. Si encuentra algún problema, infórmelo siguiendo las instrucciones de la página de Problemas y Ayuda.
Para obtener más información sobre el control de versiones de ABI, consulte la guía de control de versiones de ABI.
Versión 4.1
Cambios disruptivos en el sistema de compilación en la vers. 4.1
El controlador v4.1 introduce los siguientes cambios disruptivos en el sistema de compilación:
Requiere el controlador MongoDB C v2.0.0 o posterior
Establece
ENABLE_TESTSla opción de configuración enOFFpor defecto para las versiones descargadas automáticamente del driver de C. Esta es una expansión del cambio realizado en la versión4.0.
Cambios disruptivos en la ABI en la versión4.1
El driver v4.1 introduce los siguientes cambios disruptivos en la ABI:
Declara implementaciones de Polyfill de C++17 para
optional<T>ystring_viewen el espacio de nombresbsoncxx::v1::stdx. El espacio de nombresbsoncxx::v_noabi::stdxahora incluye alias de tipos a sus equivalentes de la v1.Nota
Esto no afecta a los usuarios que compilan con C++17 o versiones más recientes y que no hayan configurado
BSONCXX_POLY_USE_IMPLS=ON
Versión 4.0
Cambios disruptivos en el sistema de compilación en la vers. 4.0
El controlador v4.0 introduce los siguientes cambios disruptivos en el sistema de compilación:
Descarta el soporte para las librerías externas de polyfill Boost y MNMLSTC/core. Ya no puedes establecer las siguientes opciones de configuración:
ENABLE_BSONCXX_POLY_USE_IMPLS. Esta opción se establece implícitamente enON.BSONCXX_POLY_USE_MNMLSTC.BSONCXX_POLY_USE_SYSTEM_MNMLSTC.BSONCXX_POLY_USE_BOOST.
Descarta la compatibilidad con la opción de configuración
MONGOCXX_OVERRIDE_DEFAULT_INSTALL_PREFIX. Ahora se respeta el comportamiento por defecto de CMake paraCMAKE_INSTALL_PREFIX.
Establece la opción de configuración
ENABLE_TESTSenOFFpor defecto. Para volver a habilitar la construcción de objetivos de prueba, debes establecerENABLE_TESTSenON. Para incluir destinos de prueba en el destino "all", también se debe establecer la opciónBUILD_TESTINGenON.Nota
Este cambio no se aplica a las versiones descargadas automáticamente del controlador C. El cambio para las versiones descargadas automáticamente se agregó en4.1 v.
Cambios disruptivos en la API en v4.0
El controlador v4.0 introduce los siguientes cambios disruptivos en la API:
Se elimina la compatibilidad para configurar
bsoncxx::stdx::string_viewybsoncxx::stdx::optional<T>como alias para Boost o equivalentes de bibliotecas MNMLSTC/core. Para más información, consulte la sección "Cambios importantes en el sistema de compilación".Remueve los siguientes archivos de cabecera:
<bsoncxx/stdx/make_unique.hpp><bsoncxx/types/value.hpp><bsoncxx/util/functor.hpp><mongocxx/options/create_collection.hpp>
Remueve los siguientes tipos y funciones obsoletos de
utf8que tienen equivalentes enstring:k_utf8de la clasebsoncxx::v_noabi::type. En su lugar, usek_string.b_utf8de la clasebsoncxx::v_noabi::types. En su lugar, useb_string.get_utf8()de las clasesbsoncxx::v_noabi::document::element,bsoncxx::v_noabi::array::elementybsoncxx::v_noabi::types::bson_value::view. En su lugar, useget_string().k_cannot_append_utf8de la clasebsoncxx::v_noabi::exception::error_code. En su lugar, usek_cannot_append_string.k_need_element_type_k_utf8de la clasebsoncxx::v_noabi::exception::error_code. En su lugar, usek_need_element_type_k_string.
Elimina el espacio de nombres
mongocxx::stdx. Reemplace los siguientes tipos en su código:mongocxx::stdx::optional<T>. En vez de eso, utilicebsoncxx::stdx::optional<T>.mongocxx::stdx::string_view. En vez de eso, utilicebsoncxx::stdx::string_view.
Elimina las siguientes directivas y declaraciones
usingno documentadas:bsoncxx::builder::typesdesde el archivo de encabezado<bsoncxx/builder/list.hpp>. En su lugar, utilizabsoncxx::typesde<bsoncxx/types.hpp>.bsoncxx::builder::stream::concatenatedesde el archivo de encabezado<bsoncxx/builder/stream/helpers.hpp>. En su lugar, utilizabsoncxx::builder::concatenatede<bsoncxx/builder/concatenate.hpp>.mongocxx::events::read_preferencedesde el archivo de encabezado<mongocxx/events/topology_description.hpp>. En su lugar, utilizamongocxx::read_preferencede<mongocxx/read_preference.hpp>.
Cambios disruptivos en la ABI en la versión4.0
El driver v4.0 introduce los siguientes cambios disruptivos en la ABI:
Se elimina la compatibilidad para configurar
bsoncxx::stdx::string_viewybsoncxx::stdx::optional<T>como alias para Boost o equivalentes de bibliotecas MNMLSTC/core. Para más información, consulte la sección "Cambios importantes en el sistema de compilación".Remueve las funciones
utf8en desuso que tienen equivalentesstring. Para obtener una lista completa de estos cambios, consulte la sección API Cambios disruptivos.
Versión 3.11
Cambios disruptivos en el sistema de compilación en la vers. 3.11
El controlador v3.11 introduce los siguientes cambios disruptivos en el sistema de compilación:
Elimina la compatibilidad con MongoDB Server v3.6.
Se requiere MongoDB C Driver v1.28.0 o posterior.
Si la opción de configuración
ENABLE_TESTSestá establecida enON, se requiere C++14 o posterior. Puede optar por no cumplir con el requisito de C++14 deshabilitando las pruebas conENABLE_TESTS=OFFdurante la configuración de CMake.
Cambios disruptivos en la ABI en la versión3.11
El driver v3.11 introduce los siguientes cambios disruptivos en la ABI:
Se remueve la exportación de las siguientes funciones nodos privadas en el ABI bsoncxx:
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*) Elimina la exportación de las siguientes funciones miembro privadas en la ABI mongocxx:
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() Declarar todos los símbolos de funciones exportadas con
__cdeclal compilar con MSVC. Este es un cambio disruptivo en el ABI si se utiliza una convención de llamada por defecto alternativa al compilar proyectos.
Versión 3.10
Cambios disruptivos en el sistema de compilación en la vers. 3.10
El controlador v3.10 introduce los siguientes cambios disruptivos en el sistema de compilación:
Elimina el soporte para invocaciones de
find_package(libbsoncxx)yfind_package(libmongocxx). Utilicefind_package(bsoncxx)yfind_package(mongocxx)en su lugar.Se elimina el soporte para las variables de CMake
LIBBSONCXX_*yLIBMONGOCXX_*proporcionadas por los archivos de configuración de paquetes de CMake heredados. En su lugar, utilice los objetivos CMake demongo::bsoncxx_*ymongo::mongocxx_*.Elimina la opción
BSONCXX_POLY_USE_STD_EXPERIMENTALde CMake y abandona la compatibilidad para seleccionar la biblioteca estándar experimental de C++ como una opción polyfill.
Versión 3.9
Cambios disruptivos en el sistema de compilación en la vers. 3.9
El driver v3.9 introduce los siguientes cambios disruptivos:
Elimina el soporte para los objetivos exportados del árbol de compilación del proyecto CMake
Descarta el soporte para macOS 10.14, macOS 10.15, y Ubuntu 14.04
Requiere el controlador MongoDB C v1.25.0 o posterior
Requiere CMake v3.15 o posterior para admitir el módulo
FetchContent
Versión 3.8 y anteriores
Para versiones de drivers 3.8 y anteriores, consulta las notas de la versión y los tickets de JIRA asociados para cada versión en GitHub.