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úrate de que la nueva versión del controlador de C++ sea compatible con las versiones de MongoDB Server a las que tu aplicación se conecta y con la versión estándar de C++ con la que tu aplicación se compila. 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 disruptivos
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 más información, consulta Versionado 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 van acompañados de un aumento en la versión principal de la API. Es posible que debas editar el código fuente C++ de tu 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 el sistema de compilación se refieren al sistema de compilación o al empaquetado de las librerías del driver en C++. Estos cambios no necesariamente están acompañados de un aumento importante en la versión de la API ni en la versión ABI. Para abordar estos cambios, es posible que tengas que modificar las configuraciones de tu sistema de construcción o actualizar los ajustes de gestión de paquetes o dependencias de tu proyecto. Es posible que también debas modificar o reconstruir tu código fuente en 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.
cambio disruptivo
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:
El soporte para macOS 11 y macOS 12se descarta
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 de C++ está disponible para uso experimental. Como parte de este cambio, se hicieron cambios disruptivos importantes a la ABI inestable. Cuando actualices a la versión4.2 del controlador, te recomendamos migrar a usar la ABI Estable (v1.0) en tu aplicación.
La ABI estable no debe introducir ningún cambio disruptivo en la API. Si encuentras algún problema, por favor repórtalo siguiendo las instrucciones en la página Problemas y Ayuda.
Para obtener más información sobre la gestión de versiones de ABI, consulte la guía Gestión 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 MongoDB C Driver v2.0.0 o una versión 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 del controlador C que se descargan automáticamente. El cambio para las versiones descargadas automáticamente se añadió en la v4.1.
Cambios disruptivos en la API en v4.0
El controlador v4.0 introduce los siguientes cambios disruptivos en la API:
Se elimina el soporte para configurar
bsoncxx::stdx::string_viewybsoncxx::stdx::optional<T>como alias de Boost o de los equivalentes en la librería MNMLSTC/core. Para más contexto, consulta la sección Cambios disruptivos en el sistema de construcció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 el soporte para configurar
bsoncxx::stdx::string_viewybsoncxx::stdx::optional<T>como alias de Boost o de los equivalentes en la librería MNMLSTC/core. Para más contexto, consulta la sección Cambios disruptivos en el sistema de construcció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. Puedes optar por no cumplir el requisito de C++14 desactivando 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*) Remueve la exportación de las siguientes funciones miembro privadas en ABI de 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 CMake
BSONCXX_POLY_USE_STD_EXPERIMENTALy elimina el soporte para seleccionar la biblioteca estándar experimental de C++ como una opción de 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 MongoDB C Driver v1.25.0 o una versión 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.