Docs Menu
Docs Home
/ /

Cambios de compatibilidad con mongo shell heredado

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

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

db.collection.copyTo()

Etapa de agregación: $out

db.collection.count()

db.collection.insert()

db.collection.remove()

db.collection.save()

db.collection.update()

DBQuery.shellBatchSize

Mongo.getSecondaryOk

Mongo.isCausalConsistency

Mongo.setSecondaryOk

rs.secondaryOk

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:

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.

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 dbs

  • show databases

  • show collections

  • show tables

En el shell heredado mongo, estas operaciones utilizan la preferencia de lectura especificada.

Las escrituras reintentables están habilitadas por defecto mongosh en. Estaban deshabilitadas por defecto en el shell antiguo. Para mongo deshabilitarlas,--retryWrites=false utilice.

Estos métodos ObjectId() funcionan de manera diferente en mongosh que en el mongo shell heredado.

Método o atributo
mongo Comportamiento
mongosh Comportamiento

ObjectId.str

Returns a hexadecimal string:
6419ccfce40afaf9317567b7
Undefined
(Not available)

ObjectId.valueOf()

Returns the value of ObjectId.str:
6419ccfce40afaf9317567b7
Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")

ObjectId.toString()

Returns a formatted string:
ObjectId("6419ccfce40afaf9317567b7")
Returns a hexadecimal formatted string:
6419ccfce40afaf9317567b7

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

NumberInt

Int32

NumberLong

Long

NumberDecimal

Decimal128

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.

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.

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"
}
}

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 matriz

  • Establecedores 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.

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().

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();
}

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.

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 });
}
}

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.

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.

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.

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().

Por defecto, las escrituras reintentables son:

  • activado en mongosh

  • desactivado en el shell mongo heredado

Para deshabilitar las escrituras reintentables,--retryWrites=false utilice.

Para obtener más detalles, consulte --retryWrites.

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.

Trabajar con fragmentos de código es diferente para el shell heredado mongo.

Para obtener más detalles, consulte Obtener ayuda para un fragmento.

Volver

Guía rápida

En esta página