Los siguientes 5.0 cambios pueden afectar la compatibilidad con versiones anteriores de MongoDB.
Ciertos comandos sólo aceptan parámetros reconocidos
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:
Comandos eliminados
A partir de MongoDB 5.0, se eliminan estos comandos de base de datos y mongo métodos auxiliares de shell:
Comando eliminado | Alternativa |
|---|---|
| |
| |
| |
No disponible | |
| Uno de los operadores de consulta geoespacial |
| |
| No disponible |
| |
| |
No disponible | |
No disponible |
Parámetros eliminados
MongoDB 5.0 elimina los siguientes parámetros del servidor:
Parámetros eliminados | Descripción |
|---|---|
| MongoDB 5.0 elimina el parámetro de servidor |
| MongoDB 5.0 elimina el parámetro de servidor |
| MongoDB 5.0 elimina el parámetro de servidor |
| MongoDB 5.0 elimina el parámetro de servidor |
| MongoDB 5.0 elimina el parámetro de servidor |
Tipos de índice eliminados
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.
Métricas eliminadas
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.
currentOp Cambio de salida
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.
Se eliminó la compatibilidad con Raspberry Pi
MongoDB 5.0 ya no es compatible con Raspberry Pi. Para ejecutar MongoDB en Raspberry Pi, instale la versión 4.4.
Comportamiento de TTL cuando se establece en expireAfterSeconds NaN
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
mongorestorede 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.
Cambios de shell
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.
Sets de réplicas
enableMajorityReadConcern No es configurable
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).
secondaryDelaySecs Ajuste de configuración
A partir de MongoDB,5.0 secondaryDelaySecs reemplaza slaveDelay a. Este cambio no es compatible con versiones anteriores.
Nombres de host necesarios para DNS de horizonte dividido
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.
Lecturas no transaccionales en config.transactions
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:
"majority"y la opción afterClusterTime está configuradaAl utilizar un controlador MongoDB y dentro de
"majority"una sesión causalmente consistente
Escrituras manuales de registros de operaciones
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.
Reconfiguración automática para nuevos miembros del conjunto de réplicas de votación
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
newlyAddedgenerarán un error incluso si se ejecutan con{ force: true }.Si un nodo existente tiene un
newlyAddedcampo, usar para cambiar la configuración no eliminarárs.reconfig()elnewlyAddedcampo. ElnewlyAddedcampo se añadirá a la configuración proporcionada por el usuario.replSetGetConfigeliminará losnewlyAddedcampos de su salida. Si desea ver losnewlyAddedcampos, puede consultarlocal.system.replsetdirectamente la colección.
Se eliminaron los valores personalizables para getLastErrorDefaults
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.
Acuse de recibo de escritura del conjunto de réplicas
A partir de MongoDB 5.0, los nodos del set de réplicas en el estado STARTUP2 no participan en mayorías de escritura.
Nivel de confirmación de escritura por defecto implícito
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 |
|
4 | 1 | 5 | 3 |
|
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.
Nivel de consistencia de lectura snapshot sobre colecciones con tamaño fijo
A partir de MongoDB,5.0 no se puede utilizar "snapshot" la preocupación de lectura al leer desde una colección limitada.
local es la preocupación de lectura predeterminada
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.
Nuevo cursor.map() tipo de retorno
cursor.map() devolvió un Array en el mongo shell heredado. El tipo de retorno es Cursor mongoshen. Puede usar .toArray() para convertir los resultados.
Actualizar cambios del operador
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").
Actualizar la orden de procesamiento del operador
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.
$setWindowFields Etapa con transacciones y lectura de instantáneas
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.
Límites de parámetros del operador de pipeline de agregación
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.
listDatabases Cambios en la salida
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) |
|---|---|---|---|
| entero | doble | entero |
| entero | doble | entero |
| 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.
Seguridad
Advertencia de inicio de conexión TLS con certificado X509
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.
Map-Reduce
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.
Auditoría
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á.
Reducir el riesgo de fragmentos obsoletos en transacciones particionadas
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.
Cambios generales
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.viewscolección.El comando
reIndexy el método de shelldb.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
directoryPerDBo está habilitado, se elimina el subdirectorio recién vacío para esa base de--directoryperdbdatos.El
$subtractoperador de agregación convertirá el tipo de dato del resultado si es necesario para representarlo con precisión. Consulte para conocer las conversiones$subtractespecíficas.MongoDB remueve la opción de línea de comandos
--serviceExecutory la correspondiente opción de configuraciónnet.serviceExecutor.No puedes autenticarte como usuarios simultáneos en la misma sesión de cliente si la opción
--apiStrictestá activada. Si intentas autenticarte como un nuevo usuario mientras ya has iniciado sesión como usuario existente y la opción de propiedad--apiStrictestá 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.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
setDefaultRWConcerncomando.Para establecer el
replSetOplogtamaño en, utilicemongoshelDouble()constructor con elreplSetResizeOplogcomando.
Obsolescencias
Obsoleto | Descripción |
|---|---|
| El |
| Obsoleto desde la 4.4.1 versión: utilice en su |
| Obsoleto desde la 4.4.1 versión: utilice en su |
| Obsoleto en la 5.0 versión: utilice |
| Obsoleto en la 5.0 versión: utilice |
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 |
Códigos de operación del protocolo Wire obsoletos
MongoDB 5.0 deja obsoletos los siguientes códigos de operación del protocolo de cable:
OP_REPLYOP_UPDATEOP_INSERTOP_QUERYOP_GET_MOREOP_DELETEOP_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:
getLastErrordb.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.
5.0 Compatibilidad de funciones
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:
La creación de colecciones de series de tiempo requiere que FCV esté configurado en 5.0+.
Paraconfigurar la administración del filtro de auditoría en 5.0tiempo de ejecución, es necesario que FCV esté configurado en +.
El uso de
.y$en los nombres de campo requiere que FCV esté configurado en 5.0+.Para volver a fragmentar una colección es necesario que FCV esté configurado en 5.0+.