Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Actualizar versiones de los controladores

En esta sección, puedes identificar los cambios que debes hacer en tu aplicación para actualizar tu controlador a una nueva versión.

Antes de actualizar, realiza las siguientes acciones:

  • Asegúrese de que la nueva versión del driver sea compatible con las versiones del MongoDB Server a las que su aplicación se conecta y con el entorno de ejecución de Java (JRE) en el que se ejecuta su aplicación. Para ver la información de compatibilidad, consulta el Página de Compatibilidad.

  • Aborde cualquier cambio disruptivo entre la versión actual del driver que utiliza su aplicación y su versión de actualización planificada en la sección Cambios importantes. Para aprender más sobre los cambios de compatibilidad de las versiones del servidor MongoDB, consulte la sección Cambios de compatibilidad de lanzamiento del servidor.

Tip

Para minimizar la cantidad de cambios que tu aplicación podría requerir cuando actualices las versiones del controlador en el futuro, utiliza el Stable API.

Un cambio disruptivo es una modificación en una convención o comportamiento en una versión específica del driver que podría impedir que tu aplicación funcione correctamente si no se aborda antes de actualizarla.

Los cambios disruptivos en esta sección se categorizan según la versión del driver que los ha introducido. Al actualizar versiones de drivers, soluciona todos los cambios disruptivos entre la versión actual y la versión de actualización. Por ejemplo, si vas a actualizar el driver de la v4.0 a la v4.7, soluciona todos los cambios disruptivos de la versión después de la v4.0 incluyendo cualquiera listado para la v4.7.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Elimina el soporte para MongoDB Server v3.6. Para obtener más información sobre este cambio, consulta la sección Cambios en la compatibilidad con servidores de la versión del controlador 5.2 .

  • Revisa la versionado de la dependencia mongodb-crypt para que coincida con el versionado de los drivers JVM. Versiones futuras de mongodb-crypt se lanzará junto con el controlador y compartirá el mismo número de versión. Debe actualizar su dependencia de mongodb-crypt a la v5.2.0 cuando actualice su controlador para esta actualización.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Al utilizar el mecanismo de autenticación MONGODB-OIDC, no se deben incluir caracteres de coma en el valor de cadena de conexión authMechanismProperties.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Se introducen los siguientes cambios en la clase ConnectionId:

    • El constructor ConnectionId ahora acepta un valor de tipo long como su segundo parámetro en lugar del tipo int. De manera similar, el constructor ahora acepta un valor de tipo Long como su tercer parámetro en lugar de tipo Integer. Debido a que este cambio rompe la compatibilidad binaria, recompila cualquier código existente que llame al constructor ConnectionId.

    • El método withServerValue() ahora acepta un parámetro de tipo long en lugar del tipo int. Debido a que este cambio rompe la compatibilidad binaria, debes recompilar cualquier código que llame al método withServerValue().

    • El método getServerValue() ahora regresa un valor de tipo Long en vez de tipo Integer. De manera similar, el método getLocalValue() devuelve un valor de tipo long en lugar de tipo int. Dado que este cambio rompe tanto la compatibilidad binaria como la de origen, actualice cualquier código fuente que utilice estos métodos y vuelva a compilar su binario.

  • Reemplaza las siguientes anotaciones de registros del paquete org.bson.codecs.record.annotations con anotaciones del mismo nombre del paquete org.bson.codecs.pojo.annotations:

    • BsonId

    • BsonProperty

    • BsonRepresentation

  • Cambia el tipo de datos del parámetro de duración de tiempo de espera connectTimeout para los métodos SocketSettings.Builder.connectTimeout() y SocketSettings.Builder.readTimeout(). El tipo de datos de este parámetro ahora es long en vez de int.

    En versiones anteriores, este parámetro es de tipo int para ambos métodos. Este cambio afecta la compatibilidad binaria y requiere recompilación, pero no requiere cambios en el código.

  • Remueve el método Filters.eqFull(), lanzado exclusivamente en Beta, que te permitía construir un filtro de igualdad al realizar una búsqueda vectorial. En su lugar, puedes usar el método Filters.eq() al crear una instancia del tipo VectorSearchOptions, como se muestra en el siguiente código:

    VectorSearchOptions opts = vectorSearchOptions().filter(eq("x", 8));
  • Elimina la clase implícita org.mongodb.scala.ObservableImplicits.ToSingleObservableVoid. El tipo org.reactivestreams.Publisher[Void] ya no se convierte automáticamente a org.mongodb.scala.SingleObservable[Void]. La API también expone org.mongodb.scala.Observable[Unit] en lugar de org.mongodb.scala.Observable[Void].

    Para obtener más información, consulta el Observable atributo en la documentación de la API de Scala.

  • Cambia cómo ClusterSettings calcula la configuración ClusterConnectionMode, haciéndola más coherente al utilizar el nombre del set de réplicas especificado, independientemente de cómo esté configurado. Anteriormente, el driver solo consideraba el nombre del set de réplicas si se establecía en la cadena de conexión.

    Por ejemplo, las siguientes dos muestras de código devuelven ambos el valor ClusterConnectionMode.MULTIPLE. Anteriormente, el segundo ejemplo devolvió ClusterConnectionMode.SINGLE.

    ClusterSettings.builder()
    .applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017/?replicaSet=replset"))
    .build()
    .getMode()
    ClusterSettings.builder()
    .hosts(Collections.singletonList(
    new ServerAddress("127.0.0.1", 27017)
    ))
    .requiredReplicaSetName("replset")
    .build()
    .getMode()
  • BsonDecimal128 los valores responden a las llamadas de métodos de la misma manera que los valores Decimal128. BsonDecimal128.isNumber() ahora devuelve true y BsonDecimal128.asNumber() devuelve el BsonNumber equivalente.

  • Remueve los métodos ServerAddress getSocketAddress() y getSocketAddresses().

    En lugar de getSocketAddress(), utiliza el método de instancia getByName() de java.net.InetAddress.

    En lugar de getSocketAddresses(), utiliza el método de instancia getAllByName() de java.net.InetAddress.

  • Remueve los métodos UnixServerAddress getSocketAddress() y getUnixSocketAddress().

    En lugar de getSocketAddress(), utiliza el método de instancia getByName() de java.net.InetAddress.

    En lugar de getUnixSocketAddress(), construya una instancia de jnr.unixsocket.UnixSocketAddress. Pasar la ruta completa del archivo del socket UNIX al constructor. Por defecto, MongoDB crea un archivo de socket UNIX situado en "/tmp/mongodb-27017.sock". Para obtener más información sobre la clase UnixSocketAddress, consulta la documentación de la API UnixSocketAddress.

  • Remueve la interfaz Parameterizable. En lugar de implementar esta interfaz en un tipo Codec personalizado, sobrescriba el método CodecProvider.get() en el CodecProvider del códec si el códec está destinado a un tipo parametrizado.

  • Remueve el método isSlaveOk() de las clases ReadPreference y TaggableReadPreference. Para comprobar si una preferencia de lectura permite leer de un miembro secundario de un set de réplicas, use los isSecondaryOk() métodos de estas clases en su lugar.

  • Elimina los métodos auxiliares DBCollection.getStats() y DBCollection.isCapped() para el comando collStats. En lugar de estos métodos, puedes usar la etapa del pipeline de agregación $collStats.

  • Elimina las clases MapCodec y IterableCodec. En lugar de MapCodec, se debe usar MapCodecProvider. En lugar de IterableCodec, usar CollectionCodecProvider, o IterableCodecProvider para los tipos Iterable que no sean tipos Collection.

  • Remueve los métodos sharded() y nonAtomic() de las clases MapReducePublisher y MapReduceIterable.

  • Elimina los siguientes métodos para su uso con índices geoHaystack:

    • Indexes.geoHaystack()

    • IndexOptions.getBucketSize()

    • IndexOptions.bucketSize()

    En su lugar, puedes usar la etapa del pipeline de agregación $geoNear o un operador del query geoespacial en un índice 2d. Para obtener más información, consulta la página Consultas geoespaciales en el manual de MongoDB Server.

  • Elimina la opción oplogReplay de las operaciones de búsqueda. Los siguientes métodos oplogReplay ya no están disponibles:

    • DBCursor.oplogReplay()

    • DBCollectionFindOptions.isOplogReplay()

    • DBCollectionFindOptions.oplogReplay()

    • FindPublisher.oplogReplay()

    • FindIterable.oplogReplay()

  • Elimina los siguientes constructores Exception:

    • MongoBulkWriteException(BulkWriteResult, List<BulkWriteError>, WriteConcernError, ServerAddress)

    • MongoCursorNotFoundException(long, ServerAddress)

    • MongoQueryException(ServerAddress, int, String)

    • MongoQueryException(ServerAddress, int, String, String)

    • MongoQueryException(MongoCommandException)

  • Remueve las siguientes sobrecargas para el método BulkWriteResult.acknowledged():

    • acknowledged(Type, int, List<BulkWriteUpsert>)

    • acknowledged(Type, int, Integer, List<BulkWriteUpsert>)

    • acknowledged(int, int, int, Integer, List<BulkWriteUpsert>)

  • Elimina los siguientes constructores ChangeStreamDocument:

    • ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, TDocument, BsonDocument, ...)

    • ChangeStreamDocument(String, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)

    • ChangeStreamDocument(OperationType, BsonDocument, BsonDocument, BsonDocument, TDocument, BsonDocument, BsonTimestamp, ...)

  • Se remueven los siguientes constructores para eventos:

    • CommandEvent(RequestContext, int, ConnectionDescription, String)

    • CommandEvent(int, ConnectionDescription, String)

    • CommandEvent(RequestContext, long, int, ConnectionDescription, String)

    • CommandFailedEvent(RequestContext, int, ConnectionDescription, String, long, Throwable)

    • CommandFailedEvent(int, ConnectionDescription, String, long, Throwable)

    • CommandStartedEvent(RequestContext, int, ConnectionDescription, String, String, BsonDocument)

    • CommandStartedEvent(int, ConnectionDescription, String, String, BsonDocument)

    • CommandSucceededEvent(RequestContext, int, ConnectionDescription, String, BsonDocument, long)

    • CommandSucceededEvent(int, ConnectionDescription, String, BsonDocument, long)

    • ConnectionCheckedInEvent(ConnectionId)

    • ConnectionCheckedOutEvent(ConnectionId, long)

    • ConnectionCheckedOutEvent(ConnectionId)

    • ConnectionCheckOutFailedEvent(ServerId, long, Reason)

    • ConnectionCheckOutFailedEvent(ServerId, Reason)

    • ConnectionCheckOutStartedEvent(ServerId)

    • ConnectionReadyEvent(ConnectionId)

    • ServerHeartbeatFailedEvent(ConnectionId, long, Throwable)

    • ServerHeartbeatSucceededEvent(ConnectionId, BsonDocument, long)

  • Remueve la opción errorLabels de la clase WriteConcernError. Esto incluye los métodos addLabel() y getErrorLabels() y el constructor que incluye un parámetro errorLabels. En su lugar, puedes utilizar las etiquetas de error incluidas en el objeto MongoException que contiene el WriteConcernError.

  • Elimina las siguientes clases del paquete com.mongodb.event:

    • ConnectionAddedEvent

    • ConnectionPoolOpenedEvent

    • ConnectionRemovedEvent

    • ClusterListenerAdapter

    • ConnectionPoolListenerAdapter

    • ServerListenerAdapter

    • ServerMonitorListenerAdapter

    El controlador también elimina los siguientes métodos relacionados de la interfaz ConnectionPoolListener:

    • connectionAdded()

    • connectionPoolOpened()

    • connectionRemoved()

    Para obtener más información sobre el paquete com.mongodb.event, consulte la documentación de la API.

  • Agrega la opción authorizedCollection para el comando listCollections. Esto introduce un cambio binario radical en el método MongoDatabase.listCollectionNames(). Este cambio no requiere ninguna modificación al código fuente, pero se debe recompilar cualquier código que utilice este método.

  • Remueve los siguientes métodos y tipos relacionados con la interfaz Stream:

    • MongoClientSettings.Builder.streamFactoryFactory() método. Usa el método MongoClientSettings.Builder.transportSettings() en su lugar.

    • MongoClientSettings.getStreamFactoryFactory() método. Usa el método MongoClientSettings.getTransportSettings() en su lugar.

    • NettyStreamFactoryFactory clase. En su lugar, llame al método TransportSettings.nettyBuilder() para crear un objeto NettyTransportSettings. Luego, llama al método MongoClientSettings.Builder.transportSettings() para aplicar la configuración.

    • NettyStreamFactory clase.

    • AsynchronousSocketChannelStreamFactory clase.

    • AsynchronousSocketChannelStreamFactoryFactory clase.

    • BufferProvider interfaz.

    • SocketStreamFactory clase.

    • Stream interfaz.

    • StreamFactory interfaz.

    • StreamFactoryFactory interfaz.

    • TlsChannelStreamFactoryFactory clase.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Se termina el soporte para conectarse a versiones de MongoDB Server v3.4 y anteriores. Para obtener más información sobre este cambio, consulta la sección Cambios en la compatibilidad con servidores de la versión del controlador 4.8 .

  • Requiere agregar una dependencia explícita en el módulo org.bson.codecs.record si tu aplicación implementa el controlador en un contenedor OSGi y depende del controlador para codificar y decodificar registros Java.

  • RecordCodec deserializa POJO y clases de registro que se especifican como parámetros de tipo de campos List o Map a los tipos de registro y POJO correspondientes. Anteriormente, este "codec" los deserializaba como valores de Document.

    Por ejemplo, las siguientes definiciones de clases de registro muestran un registro Book que contiene un List que recibe un parámetro de tipo Chapter:

    public record Book(String title, List<Chapter> chapters) {}
    public record Chapter(Integer number, String text) {}

    A partir de esta versión, el códec deserializa datos en el List en clases de registro Chapter en lugar de valores Document.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • La API del generador setWindowFields ya no está en beta. El nuevo método del generador de etapas de pipeline rompe la compatibilidad binaria y de código fuente. Consulta la documentación de la API Agregados para obtener información sobre las nuevas firmas de métodos setWindowFields().

    Si tu aplicación utiliza este generador en una versión anterior a la v4.7, actualiza tu código fuente para utilizar la nueva firma del método y reconstruye tu binario.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Actualiza la clase ObjectId y su campo serialVersionUID para utilizar un nuevo formato que minimice los problemas de compatibilidad de serialización entre diferentes versiones del controlador.

    Si una aplicación que usa la versión 4.2 o posterior del controlador intenta realizar la Serialización de Objetos de Java en cualquier objeto que contenga un ObjectId y haya sido serializado por una versión anterior del controlador, Java lanza un InvalidClassException.

    Para aprender más sobre la Serialización de Objetos en Java, consulta Objetos Serializables en la documentación de Java.

Esta versión del driver introduce los siguientes cambios disruptivos:

  • Se remueven varias clases y métodos marcados como obsoletos en la versión 3.12.

  • Modifica los métodos auxiliares de inserción para devolver un objeto InsertOneResult o InsertManyResult en lugar de void.

  • Modifica los métodos toJson() en las clases BsonDocument, Document y DbObject para que devuelvan un formato JSON flexible en lugar de un formato JSON estricto. Esto hace que los documentos JSON sean más legibles, pero puede dificultar la identificación de la información del tipo BSON, como la diferencia entre un entero de 32bits y un entero de 64bits. Si tu aplicación depende del formato estricto de JSON, utiliza el modo estricto al leer o escribir datos.

  • Cambia la representación BSON por defecto de los valores java.util.UUID de JAVA_LEGACY a UNSPECIFIED. Las aplicaciones que almacenan o recuperan valores UUID deben especificar explícitamente qué representación usar. Puedes especificar la representación en la propiedad uuidRepresentation de un objeto MongoClientSettings.

    La representación UUID que especifiques controla estrictamente cómo el controlador decodifica los UUID. En la versión 4.0, la representación de JAVA_LEGACY sólo funciona con el subtipo 3. En versiones anteriores del controlador, si especificabas la representación JAVA_LEGACY, el controlador decodificaba objetos binarios de los subtipos 3 y 4 como UUID.

    Para obtener una lista de nodos en el enum UuidRepresentation, consulta la documentación de la API v4.0.

  • El pool de conexiones ya no restringe el número de hilos de la cola de espera ni de tareas asincrónicas que requieran una conexión a MongoDB. La aplicación regula las solicitudes según sea necesario en lugar de depender de que el driver lance un MongoWaitQueueFullException.

  • El driver ya no registra utilizando el paquete java.util.logging y solo admite el framework de registro SLF4J.

  • Se eliminaron los drivers integrados y Android. Si tu aplicación depende de estos controladores, debes seguir usando una versión 3.x del controlador Java.

  • Los uber JAR del controlador Java, mongo-java-driver y mongodb-driver, ya no se publican. Si tu aplicación depende de estos uber JARs, remuévelos como dependencia y utiliza uno de los siguientes paquetes en su lugar:

    • Si su aplicación utiliza la API actual, agregue el paquete mongodb-driver-sync como dependencia.

    • Si tu aplicación usa la API heredada, añade el paquete mongodb-driver-legacy como dependencia.

  • Varias clases introducen rupturas en la compatibilidad binaria, como el cambio en la firma del método de los métodos asistentes de inserción. Recompila cualquier clase que esté vinculada al driver contra esta versión o posteriores para asegurarte de que continúen funcionando.

Un cambio de compatibilidad en el lanzamiento de un servidor es una modificación en el controlador Scala que deja de tener soporte para un conjunto de versiones de MongoDB Server.

El driver interrumpe el soporte para una versión de MongoDB Server después de que esta llegue a su final de vida útil (EOL).

Para obtener más información sobre el soporte de MongoDB para productos EOL, consulta la Política de soporte para versiones anteriores.

El controlador v5.5 deja de ser compatible con el MongoDB Server 4.0. Para utilizar el v5.5 driver, debes conectarte a MongoDB Server 4.2 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

No se puede usar una versión 3.x del driver de Scala para conectarse a una implementación de MongoDB que ejecute la versión8.1 del MongoDB Server. A partir de la versión v8.1 de MongoDB Server, el comando buildinfo requiere autenticación, lo que causa una incompatibilidad con la v3.x driver.

El controlador v5.2 deja de ser compatible con el MongoDB Server 3.6. Para utilizar el v5.2 driver, debes conectarte a MongoDB Server 4.0 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

El driver v4.8 descarta el soporte para MongoDB Server 3.4 y versiones anteriores. Para utilizar el v4.8 driver, debes conectarte a MongoDB Server 3.6 o posterior. Para aprender cómo actualizar su implementación del Servidor MongoDB, vea las Notas de la versión en el manual del Servidor MongoDB.

Volver

Novedades