Docs Menu
Docs Home
/ /
5.0

Cambios de compatibilidad en MongoDB 5.0

Los siguientes 5.0 cambios pueden afectar la compatibilidad con versiones anteriores de MongoDB.

A partir de MongoDB 5.0, ciertos comandos de base de datos generan un error si se les pasa un parámetro que no aceptan explícitamente. En MongoDB 4.4 y versiones anteriores, los parámetros no reconocidos se ignoran sin previo aviso.

Comandos afectados:

A partir de MongoDB 5.0, se eliminan estos comandos de base de datos y mongo métodos auxiliares de shell:

Comando eliminado
Alternativa

db.collection.copyTo()

db.collection.ensureIndex()

db.collection.save()

No disponible

geoSearch

Mongo.getSecondaryOk()

Mongo.isCausalConsistency

No disponible

Mongo.setSecondaryOk()

rs.secondaryOk()

No disponible

No disponible

MongoDB 5.0 elimina los siguientes parámetros del servidor:

Parámetros eliminados
Descripción

cachePressureThreshold

MongoDB 5.0 elimina el parámetro de servidor cachePressureThreshold. Debido a cambios en la forma en que WiredTiger calcula el tamaño de la ventana de instantáneas, este parámetro ya no es relevante.

shouldMultiDocTxnCreateCollectionAndIndexes

MongoDB 5.0 elimina el parámetro de servidor shouldMultiDocTxnCreateCollectionAndIndexes. A partir de 5.0, la recopilación y la creación de índices dentro de las transacciones siempre están habilitadas. Ya no se puede usar el parámetro de servidor para deshabilitar este comportamiento.

connPoolMaxShardedConnsPerHost

MongoDB 5.0 elimina el parámetro de servidor connPoolMaxShardedConnsPerHost.

connPoolMaxShardedInUseConnsPerHost

MongoDB 5.0 elimina el parámetro de servidor connPoolMaxShardedInUseConnsPerHost.

shardedConnPoolIdleTimeoutMinutes

MongoDB 5.0 elimina el parámetro de servidor shardedConnPoolIdleTimeoutMinutes.

MongoDB 5.0 elimina el geoHaystack índice obsoleto. En su 2lugar, utiliza un índice d.

Actualizar su instancia de MongoDB a 5.0 y configurar featureCompatibilityVersion en 5.0 eliminará cualquier índice geoHaystack preexistente.

A partir de MongoDB,5.0 el serverStatus comando no genera, que opReadConcernCounters contenía el nivel de lectura especificado por las operaciones de consulta. En su lugar, el nuevo readConcernCounters reemplaza opReadConcernCounters a y contiene información adicional.

A partir de MongoDB,5.0 el comando no serverStatus genera cache pressure percentage threshold current cache pressure percentage ni wiredTiger.snapshot-window-settings bajo.

A partir de MongoDB,5.0 la métrica solo está $currentOp.remainingOperationTimeEstimated presente en el fragmento del destinatario cuando se lleva a cabo una operación de reorganización de fragmentos.

MongoDB 5.0 ya no es compatible con Raspberry Pi. Para ejecutar MongoDB en Raspberry Pi, instale la versión 4.4.

A partir de MongoDB,5.0 los índicesTTL con expireAfterSeconds establecido en experimentan NaN un cambio de comportamiento en comparación con versiones anteriores.

El cambio de comportamiento afecta:

  • actualizaciones directas

  • sincronización inicial desde versiones anteriores

  • mongorestore de versiones anteriores

Realizar cualquiera de esas acciones hará que un valor expireAfterSeconds de NaN se trate como un expireAfterSeconds de 0. Como resultado, los documentos pueden caducar inmediatamente.

A partir de MongoDB 5.0.14 (y 6.0.2), el servidor no utilizará índices TTL que tengan expireAfterSeconds configurado en NaN.

El mongo shell ha quedado obsoleto en MongoDB5.0 v. El shell de reemplazo mongosh es.

El empaquetado de shell también cambia en MongoDB v.5.0 Consulte las instrucciones de instalación para obtener más detalles.

A partir de MongoDB 5.0, enableMajorityReadConcern y --enableMajorityReadConcern no se pueden cambiar y siempre se establecen en true debido a mejoras en el motor de almacenamiento.

En versiones anteriores de MongoDB, enableMajorityReadConcern y son configurables y se pueden establecer --enableMajorityReadConcern en false para evitar que la presión de la memoria caché de almacenamiento inmovilice una implementación con una arquitectura de árbitro primario-secundario (PSA) de tres miembros.

Si está utilizando una arquitectura de tres nodos de primario-secundario-árbitro (PSA), considere lo siguiente:

  • El nivel de confirmación de escritura "majority" puede causar problemas de rendimiento si un secundario no está disponible o está retrasado. Para obtener consejos sobre cómo mitigar estos problemas, consulta Mitigar problemas de rendimiento con un set de réplicas de PSA autogestionado.

  • Si estás utilizando un "majority" global por defecto y el nivel de confirmación de escritura es menor que el tamaño de la mayoría, tus consultas pueden devolver datos obsoletos (no completamente replicados).

A partir de MongoDB,5.0 secondaryDelaySecs reemplaza slaveDelay a. Este cambio no es compatible con versiones anteriores.

Para configurar nodos de clúster para DNS de horizonte dividido, utilice nombres de host en lugar de direcciones IP.

A partir de MongoDB v5.0, replSetInitiate y replSetReconfig rechazarán las configuraciones que utilicen direcciones IP en lugar de nombres de host.

Utilice disableSplitHorizonIPCheck para modificar los nodos que no se pueden actualizar para usar nombres de host. El parámetro solo se aplica a los comandos de configuración.

mongod y mongos no dependen de disableSplitHorizonIPCheck para la validación al inicio. Las instancias heredadas mongod y mongos que utilizan direcciones IP en lugar de nombres de host pueden iniciarse después de una actualización.

Las instancias configuradas con direcciones IP generan un registro de advertencia para que se usen nombres de host en lugar de direcciones IP.

A partir de MongoDB,5.0 no se permiten lecturas que no sean transacciones en la colección con las siguientes opciones y problemas de config.transactions lectura:

A partir de MongoDB 5.0, ya no es posible realizar operaciones de escritura manuales en el oplog en un clúster que se ejecuta como un set de réplicas. Realizar operaciones de escritura en el oplog cuando se ejecuta como una instancia autónoma solo debe hacerse con la orientación del Soporte de MongoDB.

A partir de MongoDB,5.0 un miembro secundario recién agregado no cuenta como miembro con derecho a voto y no puede ser elegido hasta que haya alcanzado el SECONDARY estado.

Al añadir un nuevo nodo con derecho a votación a un conjunto de réplicas, replSetReconfig añadirá internamente un newlyAdded campo a la configuración del nodo. Los nodos con el newlyAdded campo no se contabilizan para el número actual de nodos con derecho a votación. Al finalizar la sincronización inicial y alcanzar el estado,SECONDARY el newlyAdded campo se elimina automáticamente.

Nota

  • Las configuraciones que intenten agregar un campo llamado newlyAdded generarán un error incluso si se ejecutan con { force: true }.

  • Si un nodo existente tiene un newlyAdded campo, usar para cambiar la configuración no eliminará rs.reconfig() el newlyAdded campo. El newlyAdded campo se añadirá a la configuración proporcionada por el usuario.

  • replSetGetConfig eliminará los newlyAdded campos de su salida. Si desea ver los newlyAdded campos, puede consultar local.system.replset directamente la colección.

A partir de MongoDB,5.0 no se puede especificar una preocupación de escritura predeterminada con que settings.getLastErrorDefaults no { w: 1, wtimeout: 0 } sea. En su lugar, use el comando para establecer la setDefaultRWConcern configuración predeterminada de preocupación de lectura o escritura para un conjunto de réplicas o un clúster fragmentado.

A partir de MongoDB 5.0, los nodos del set de réplicas en el estado STARTUP2 no participan en mayorías de escritura.

Tip

A partir de MongoDB,5.0 la preocupación de escritura predeterminada implícita es. Sin embargo, existe un caso extremo para las implementaciones w: majority de conjuntos de réplicas que contienen árbitros:

  • La mayoría de los votos de un conjunto de réplicas es igual a 1 más la mitad del número de miembros con derecho a voto, redondeada hacia abajo. Si el número de miembros con derecho a voto que contienen datos no es mayor que la mayoría de los votos, el nivel de confirmación de escritura por defecto es { w: 1 }.

  • En todos los demás escenarios, el nivel de confirmación de escritura por defecto es { w: "majority" }.

Específicamente, MongoDB usa la siguiente fórmula para determinar el nivel de confirmación de escritura por defecto:

if [ (#arbiters > 0) AND (#non-arbiters <= majority(#voting-nodes)) ]
defaultWriteConcern = { w: 1 }
else
defaultWriteConcern = { w: "majority" }

Por ejemplo, considera las siguientes implementaciones y sus respectivos niveles de confirmación de escritura por defecto:

Non-Arbiters
Árbitros
Nodos de votación
Mayoría de nodos de votación
Nivel de confirmación de escritura por defecto implícito

2

1

3

2

{ w: 1 }

4

1

5

3

{ w: "majority" }

  • En el primer ejemplo:

    • Hay 2 miembros no árbitros y 1 árbitro, para un total de 3 nodos con derecho a voto.

    • La mayoría de los nodos de votación (1 más la mitad de 3, redondeado hacia abajo) es 2.

    • El número de miembros no árbitros (2) es igual a la mayoría de los nodos de votación (2), lo que genera un nivel de confirmación de escritura implícita de { w: 1 }.

  • En el segundo ejemplo:

    • Hay 4 miembros no árbitros y 1 árbitro para un total de 5 nodos de votación.

    • La mayoría de los nodos de votación (1 más la mitad de 5, redondeado hacia abajo) es 3.

    • El número de miembros que no son árbitros (4) es mayor que la mayoría de los nodos con derecho a voto (3), lo que resulta en un nivel de confirmación de escritura implícito de { w: "majority" }.

La { w: "majority" } nivel de confirmación de escritura (write concern) por defecto proporciona una garantía de mayor durabilidad en caso de una elección, o si los miembros del set de réplicas no están disponibles.

A partir de MongoDB,5.0 no se puede utilizar "snapshot" la preocupación de lectura al leer desde una colección limitada.

A partir de MongoDB 5.0, "local" es el nivel de consistencia de lectura por defecto para las operaciones de lectura en el primario y los secundarios. En MongoDB 4.4, las consultas dirigidas a secundarios de clúster particionado utilizan el nivel de consistencia de lectura "available" y pueden devolver documentos huérfanos.

Esto puede introducir un aumento significativo de latencia para las queries de conteo que usan un filtro y para queries cubiertas.

Puede optar por no realizar este comportamiento configurando la preocupación de lectura setDefaultRWConcernde todo el clúster con.

cursor.map() devolvió un Array en el mongo shell heredado. El tipo de retorno es Cursor mongoshen. Puede usar .toArray() para convertir los resultados.

A partir de MongoDB,5.0 ya no genera un error cuando se utilizan los siguientes operadores de actualización con una expresión de operandomongod vacía{ } ():

Una actualización vacía no produce cambios y no genera ninguna entrada en el oplog (lo que significa que la operación es una “no-op").

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

En versiones de MongoDB anteriores 5.3 a, la $setWindowFields etapa de canalización de agregación no se puede utilizar con transacciones ni con la "snapshot" pregunta de lectura.

Los siguientes operadores de canalización de agregación ahora tienen un límite máximo de valor entero de 64bits.

Si pasa un valor que excede este límite, la canalización devuelve un error de argumento no válido.

A partir de MongoDB 5.0, la salida del comandolistDatabasesque se ejecuta contra unmongodes más consistente con la salida delistDatabasesque se ejecuta contra unmongos.

La siguiente tabla muestra las diferencias entre los tipos de datos de los campos de salida de listDatabases entre MongoDB 5.0 y versiones anteriores. Sólo se listan los campos que difieren entre la versión 5.0 y las anteriores.

Campo
Escriba en MongoDB 5.0
Escriba en MongoDB 4.4 y anteriores (mongod)
Escriba en MongoDB 4.4 y anteriores (mongos)

sizeOnDisk

entero

doble

entero

totalSize

entero

doble

entero

totalSizeMb

entero

no presente (ver abajo)

entero

La salida de ahora incluye listDatabases el totalSizeMb campo al ejecutarse con o. En mongos mongodMongoDB,4 4 y versiones anteriores, totalSizeMb solo aparece al ejecutarse mongos con. totalSizeMb es la suma de los sizeOnDisk campos, expresada en megabytes.

Al ejecutarse contra,mongos el shards campo de la salida contiene un par campo-valor para cada colección de un fragmento específico. Los valores de tamaño listDatabases del shards campo se expresan como enteros.

A partir de MongoDB 5.0, mongod y mongos ahora emiten una advertencia de inicio cuando sus certificados no incluyen un atributo Nombre Alternativo del Sujeto.

Las siguientes plataformas no admiten la validación de nombres comunes:

  • iOS 13 y superior

  • MacOS 10.15 y superior

  • Go 1.15 o superior

Los clientes que usan estas plataformas no se autenticarán en los servidores de MongoDB que usan certificados X.509 cuyos nombres de host están especificados por los atributos CommonName.

A partir de la 5.0 versión, MongoDB deja obsoleta la operación map-reduce.

Para obtener ejemplos de alternativas de canalización de agregación a operaciones de map-reduce, consulte Map-Reduce a canalización de agregación yEjemplos de Map-Reduce.

MongoDB 5.0 agrega capacidades de auditoría que se pueden configurar en tiempo de ejecución.

Si auditLog.runtimeConfiguration se establece true en, los mongod mongos archivos de configuración y ya no pueden establecer setParameter.auditAuthorizationSuccess ni configurar filtros de auditoría. Si los archivos de configuración del servidor contienen estas opciones, el servidor no se iniciará y registrará un error.

Si auditLog.runtimeConfiguration se establece en false y hay un documento de configuración de filtro de auditoría, se emitirá una advertencia de inicio, pero el servidor no se interrumpirá.

A partir de MongoDB,5.0 si cambia el parámetro,transactionLifetimeLimitSeconds transactionLifetimeLimitSeconds también debe cambiar al mismo valor en todos los miembros del conjunto de réplicas del servidor de configuración. Para mantener este valor constante:

  • Garantiza que el historial de la tabla de enrutamiento se conserve al menos durante el tiempo límite de vida de las transacciones en los miembros del set de réplicas del fragmento.

  • Reduce la frecuencia de reintentos de transacciones y, por lo tanto, mejora el rendimiento.

A partir de MongoDB 5.0:

  • Si featureCompatibilityVersion "5.0" se establece en o mayor, los usuarios ya no pueden escribir directamente en la <database>.system.views colección.

  • El comando reIndex y el método de shell db.collection.reIndex() solo se pueden ejecutar en instancias independientes.

  • La cantidad de etapas de canalización de agregación permitidas en una sola canalización está limitada 1000 a.

  • Al eliminar la colección final en una base de datos (o eliminar la base de datos en sí) cuando directoryPerDB o está habilitado, se elimina el subdirectorio recién vacío para esa base de --directoryperdb datos.

  • El $subtract operador de agregación convertirá el tipo de dato del resultado si es necesario para representarlo con precisión. Consulte para conocer las conversiones $subtract específicas.

  • MongoDB remueve la opción de línea de comandos --serviceExecutor y la correspondiente opción de configuración net.serviceExecutor.

  • No puedes autenticarte como usuarios simultáneos en la misma sesión de cliente si la opción --apiStrict está activada. Si intentas autenticarte como un nuevo usuario mientras ya has iniciado sesión como usuario existente y la opción de propiedad --apiStrict está activada, se generará un mensaje de error una vez por cada intento de autenticación. Si no usas la opción --apiStrict, autenticarte como un nuevo usuario mientras ya has iniciado sesión como uno existente guardará una advertencia en el registro una vez por cada intento de autenticación.

  • La opción de $text pesos solo está permitida para índices.

  • Debe configurar explícitamente la preocupación de escritura predeterminada global antes de intentar reconfigurar un conjunto de réplicas no fragmentadas con una configuración que cambie la preocupación de escritura predeterminada implícita. Para configurar la preocupación de escritura predeterminada global, utilice el setDefaultRWConcern comando.

  • Para establecer el replSetOplog tamaño en, utilice mongosh el Double() constructor con el replSetResizeOplog comando.

Obsoleto
Descripción

mongo

El mongo shell heredado ha quedado obsoleto en MongoDB5.0 v. Su reemplazo mongosh es.

db.printSlaveReplicationInfo()

Obsoleto desde la 4.4.1 versión: utilice en su db.printSecondaryReplicationInfo() lugar.

rs.printSlaveReplicationInfo()

Obsoleto desde la 4.4.1 versión: utilice en su rs.printSecondaryReplicationInfo() lugar.

security.clusterIpSourceWhitelist

Obsoleto en la 5.0 versión: utilice security.clusterIpSourceAllowlist en su lugar.

--clusterIpSourceWhitelist

Obsoleto en la 5.0 versión: utilice --clusterIpSourceAllowlist en su lugar.

Obsoleto en la 5.0 versión: desconéctese del servidor para finalizar su sesión.

Obsoleto en la 5.0 versión: desconéctese del servidor para finalizar su sesión.

campo de mensajede auditoría local

Obsoleto desde la versión 5.0: Usa el campo localEndpoint en el mensaje de auditoría de clientMetadata en su lugar.

MongoDB 5.0 deja obsoletos los siguientes códigos de operación del protocolo de cable:

  • OP_REPLY

  • OP_UPDATE

  • OP_INSERT

  • OP_QUERY

  • OP_GET_MORE

  • OP_DELETE

  • OP_KILL_CURSORS

Las versiones más nuevas del controlador utilizan OP_MSG en lugar de estos códigos de operación obsoletos.

Los comandos y métodos relacionados también están obsoletos en MongoDB 5.0:

  • getLastError

  • db.getLastError()

  • db.getLastErrorObj()

Para garantizar que su controlador utilice el protocolo de cable más actualizado, actualice su controlador a una versión compatible con 5.0.

Cualquier código que use getLastError db.getLastError()explícitamente, o db.getLastErrorObj() debería usar la API CRUD para ejecutar la escritura con la solicitud de escritura deseada. El controlador proporcionará directamente la información sobre el éxito o el fracaso de la operación de escritura como valor de retorno.

Algunas funciones de 5.0 requieren no solo los 5.0 binarios de, sino también la featureCompatibilityVersion (FCV) establecida 5.0 en. Estas funciones incluyen:

Volver

5.0