Esta página describe las diferencias entre mongosh y el shell heredado mongo. Además de las alternativas enumeradas aquí, puede usar el mongocompat snippet para acceder a las APIs de shell heredadas mongo. Los fragmentos son una funcionalidad experimental, para obtener más información, consulte Snippets.
snippet install mongocompat
Métodos obsoletos
Los siguientes métodos de shell están obsoletos en mongosh. En su lugar, utilice los métodos enumerados en Alternative Resources columna.
Método obsoleto | Recursos alternativos |
|---|---|
| Etapa de agregación: |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Ya no es necesario. Consulta Operaciones de lectura en un nodo secundario. |
Comportamiento de la preferencia de lectura
Operaciones de lectura en un nodo secundario
Al usar el shell mongo heredado para conectarse directamente a un secundario miembro del set de réplicas, debes ejecutar mongo.setReadPref() para habilitar las lecturas secundarias.
Al usar mongosh para conectarse directamente a un miembro del conjunto de réplicas secundario, puede leer desde ese miembro si especifica una preferencia de lectura de:
Para especificar una preferencia de lectura, puede utilizar:
La opción de cadena de conexión
readPreferenceal conectarse al nodo.El
Mongo.setReadPref()método.
Cuando se utiliza mongosh para conectarse directamente a un miembro de un set de réplicas secundario, si tu preferencia de lectura está configurada en primaryPreferred, secondary o secondaryPreferred, no se requiere ejecutar rs.secondaryOk().
mostrar los Métodos asistentes
Los siguientes métodos asistentes de show siempre utilizan una preferencia de lectura de primaryPreferred, incluso cuando se ha especificado una preferencia de lectura diferente para la operación:
show dbsshow databasesshow collectionsshow tables
En el shell heredado mongo, estas operaciones utilizan la preferencia de lectura especificada.
Comportamiento de preferencia de escritura
Las escrituras reintentables están habilitadas por defecto mongosh en. Estaban deshabilitadas por defecto en el shell antiguo. Para mongo deshabilitarlas,--retryWrites=false utilice.
Métodos y atributos de ObjectId
Estos métodos de ObjectId() funcionan de manera diferente en mongosh que en el shell anterior mongo.
Método o atributo | mongo Comportamiento | mongosh Comportamiento |
|---|---|---|
| Returns a hexadecimal string: 6419ccfce40afaf9317567b7 | Undefined (Not available) |
| Returns the value of ObjectId.str:6419ccfce40afaf9317567b7 | Returns a formatted string: ObjectId("6419ccfce40afaf9317567b7") |
| Returns a formatted string: ObjectId("6419ccfce40afaf9317567b7") | Returns a hexadecimal formatted string: 6419ccfce40afaf9317567b7 |
Numeric Values
La shell heredada mongo almacenaba numéricamente los valores como doubles por defecto. En mongosh, los números se almacenan como enteros de 32 bits, Int32, o como Double en caso de que el valor no se pueda almacenar como un Int32.
MongoDB Shell continúa admitiendo los tipos numéricos que se admiten en la shell de mongo. Sin embargo, los tipos preferidos se han actualizado para alinearse mejor con los drivers de MongoDB. Consulta mongosh tipos de datos para más información.
Los tipos preferidos para variables numéricas son diferentes en MongoDB Shell que los tipos sugeridos en el shell heredado de mongo. Los tipos en mongosh se alinean mejor con los tipos utilizados por los drivers de MongoDB.
mongo tipo | mongosh tipo |
|---|---|
|
|
|
|
|
|
Advertencia
Los tipos de datos pueden almacenarse de manera inconsistente si se conecta a la misma colección utilizando tanto mongosh como el shell heredado mongo.
Tip
Para obtener más información sobre la gestión de tipos, consulte la descripción general de la validación del esquema.
Valores indefinidos
El tipo BSON no definido es obsoleto. Si se intenta insertar un documento con el tipo JS indefinido en mongosh, la implementación reemplaza el valor indefinido en el documento por el valor null de BSON. No existe una forma compatible de insertar valores indefinidos en tu base de datos utilizando mongosh.
Por ejemplo, considere ejecutar el siguiente código para insertar un documento en mongosh:
db.people.insertOne( { name : "Sally", age : undefined } )
Al ejecutar este código en mongosh, la shell inserta el siguiente documento:
{ name : "Sally", age : null }
mongosh representa cualquier valor indefinido de BSON almacenado usando otras herramientas, como el controlador Go o la antigua mongo shell, como null.
Comportamiento de citación de objetos
mongosh no pone entre comillas las claves de objeto en su salida y pone comillas simples en los valores. Para reproducir el resultado de la shell mongo heredado, que envuelve tanto las claves como los valores de string entre comillas double, utiliza mongosh --eval con EJSON.stringify().
Por ejemplo, el siguiente comando devuelve los elementos de la colección sales en la base de datos test con comillas dobles y sangría:
mongosh --eval "EJSON.stringify(db.sales.findOne().toArray(), null, 2)"
La salida se ve de la siguiente manera:
{ "_id": { "$oid": "64da90c1175f5091debcab26" }, "custId": 345, "purchaseDate": { "$date": "2023-07-04T00:00:00Z" }, "quantity": 4, "cost": { "$numberDecimal": "100.60" } }
Limitaciones en las llamadas a la base de datos
Los resultados de las consultas a la base de datos no pueden pasarse dentro de los siguientes contextos:
Funciones constructoras de clases
Funciones generadoras no asíncronas
Funciones de retorno a
.sort()en un arregloEstablecedores de JavaScript en clases
Para acceder a los resultados de las llamadas a la base de datos, utiliza funciones asíncronas, funciones generadoras asíncronas, o .map().
Constructores
Los siguientes constructores no funcionan:
// This code will fail class FindResults { constructor() { this.value = db.students.find(); } } // This code will fail function listEntries() { return db.students.find(); } class FindResults { constructor() { this.value = listEntries(); } }
Utilice una función async en su lugar:
class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); } }
Nota
También puedes crear un método que realice una operación de base de datos dentro de una clase como alternativa al trabajo con JavaScript asíncrono.
class FindResults { constructor() { } init() { this.value = db.students.find(); } }
Para utilizar esta clase, primero construya una instancia de clase y luego llame al método .init().
Funciones generadoras
Las siguientes funciones generadoras no funcionan:
// This code will fail function* FindResults() { yield db.students.findOne(); } // This code will fail function listEntries() { return db.students.findOne(); } function* findResults() { yield listEntries(); }
Usa un async generator function en su lugar:
function listEntries() { return db.students.findOne(); } async function* findResults() { yield listEntries(); }
Ordenamiento de arreglos
El siguiente ordenamiento de arreglo no funciona:
// This code will fail db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() ) } );
Utiliza .map() en su lugar.
db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() }; } ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size; } ).map( collection => collection.collectionName);
Este enfoque para ordenar matrices suele tener mejor rendimiento que el código equivalente no compatible.
JavaScript Setters
El siguiente setter de JavaScript no funciona:
// This code will fail class TestClass { value = 1; get property() { return this.value; } // does not work: set property(value) { this.value = db.test.findOne({ value }); } }
Excepciones de comandos
Para los comandos cuya salida incluye { ok: 0 }, mongosh devuelve una excepción coherente y omite la salida sin procesar del servidor. El shell mongo heredado devuelve una salida que varía para cada comando.
Para obtener más detalles, consulte Ejecutar comandos.
Configuración del Shell
La shell heredada mongo usa un archivo de configuración llamado .mongorc.js.
Si mongosh encuentra .mongorc.js al iniciar, pero no encuentra .mongoshrc.js, mongosh no carga el archivo heredado .mongorc.js e indica que debes renombrar .mongorc.js a .mongoshrc.js.
Para obtener más detalles, consulta .mongoshrc Archivo de configuración.
Tipos de datos
MongoDB almacena datos usando BSON, que admite tipos de datos adicionales que no están disponibles en JSON. El shell mongosh ofrece un mejor soporte para tipos de datos para los drivers que el shell mongo heredado.
Para obtener detalles, consulte Tipos de datos.
Métodos
El shell mongo heredado no puede acceder al nombre de archivo ni al directorio de un script en el método load().
Para más detalles, consulte load().
Escrituras reintentables
Por defecto, las escrituras reintentables son:
activado en
mongoshdesactivado en el shell
mongoheredado
Para desactivar las escrituras reintentables, utilice --retryWrites=false.
Para obtener más detalles, consulte --retryWrites.
Salida heredada
El shell mongosh devuelve una salida que difiere del shell mongo heredado. Si tienes scripts que requieren que la salida esté formateada de manera similar al shell heredado mongo, intenta reformatear la salida mongosh con EJSON.stringify().
Para obtener más detalles, consulta tojsononeline() heredado.
Fragmentos de código
El trabajo con fragmentos de código es diferente para el shell mongo heredado.
Para obtener más detalles, ver Obtener ayuda para un snippet.