Esta página describe las diferencias entre mongosh y el shell heredado mongo. Además de las alternativas enumeradas aquí, puede usar el compatibilidad mongoFragmento para acceder a las API de shell heredadas. Los fragmentos son una función experimental; para obtener más información,mongo consulte Fragmentos.
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.Consulte Operaciones de lectura en un nodo secundario. |
Comportamiento de preferencia de lectura
Operaciones de lectura en un nodo secundario
Al utilizar el shell mongo heredado para conectarse directamente a un miembro del conjunto de réplicas secundario, debe 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
readPreferenceopción de cadena de conexión al conectarse al nodo.El
Mongo.setReadPref()método.
Al usar mongosh para conectarse directamente a un miembro del conjunto de réplicas secundario, si su preferencia de lectura está configurada primaryPreferred en, secondary o,secondaryPreferred no es necesario rs.secondaryOk() ejecutar.
mostrar métodos auxiliares
Los siguientes métodos auxiliares 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 ObjectId() funcionan de manera diferente en mongosh que en el mongo shell heredado.
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 sigue siendo compatible con los tipos mongo numéricos del shell. Sin embargo, se han actualizado los tipos preferidos para que se ajusten mejor a los controladores de MongoDB. Consulte "Tipos de datos de Mongosh" para obtener más información.
Los tipos preferidos para variables numéricas en MongoDB Shell son diferentes a los sugeridos en el shell mongo heredado. Los tipos en mongosh se ajustan mejor a los tipos utilizados por los controladores 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 indefinido está obsoleto. Si intenta insertar un documento con el tipo JS indefinido mongosh en, su implementación reemplazará el valor indefinido del documento con el valor nulo de BSON. No se admite la inserción de valores indefinidos en la base de datos mongosh mediante.
Por ejemplo, considere ejecutar el siguiente código para insertar un documento en mongosh:
db.people.insertOne( { name : "Sally", age : undefined } )
Cuando ejecuta este código en mongosh, el shell inserta el siguiente documento:
{ name : "Sally", age : null }
mongosh representa cualquier valor BSON no definido almacenado mediante otras herramientas, como el controlador Go o el mongo shell heredado, como nulo.
Comportamiento de cita de objetos
mongosh No cita las claves de objeto en su salida y coloca los valores entre comillas simples. Para reproducir la salida del mongo shell heredado, que encierra tanto las claves como los valores de cadena entre comillas dobles, use 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)"
El resultado se parece al siguiente:
{ "_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 de base de datos no se pueden pasar dentro de los siguientes contextos:
Funciones constructoras de clase
Funciones de generador no asíncronas
Devoluciones de llamadas a
.sort()en una matrizEstablecedores de JavaScript en clases
Para acceder a los resultados de las llamadas a la base de datos, utilice funciones asíncronas, funciones generadoras asíncronas .map()o.
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 puede crear un método que realice una operación de base de datos dentro de una clase como alternativa a trabajar con JavaScript asincrónico.
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 del generador 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(); }
Utilice un async generator function en su lugar:
function listEntries() { return db.students.findOne(); } async function* findResults() { yield listEntries(); }
Ordenamiento de matriz
La siguiente ordenación de matrices 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 establecedor 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 de Shell
El shell heredado mongo utiliza un archivo de configuración llamado .mongorc.js.
Si mongosh encuentra .mongorc.js al iniciar pero no .mongoshrc.js encuentra, mongosh no carga el .mongorc.js archivo heredado y le indica que debe cambiar el nombre .mongorc.js de .mongoshrc.js a.
Para obtener más detalles, consulte .mongoshrc el 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 más 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 obtener más detalles, consulte load().
Escrituras reintentables
Por defecto, las escrituras reintentables son:
activado en
mongoshdesactivado en el shell
mongoheredado
Para deshabilitar las escrituras reintentables,--retryWrites=false utilice.
Para obtener más detalles, consulte --retryWrites.
Salida heredada
El mongosh shell devuelve una salida diferente a la del mongo shell heredado. Si tiene scripts que requieren que la salida tenga un formato similar al del mongo shell heredado, intente reformatear la mongosh salida con EJSON.stringify().
Para obtener más detalles, consulta tojsononeline() heredado.
Fragmentos de código
Trabajar con fragmentos de código es diferente para el shell heredado mongo.
Para obtener más detalles, consulte Obtener ayuda para un fragmento.