Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Consideraciones sobre el script

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

  • Devoluciones de llamadas a .sort() en un arreglo

  • Establecedores de JavaScript en clases

Para acceder a los resultados de las llamadas a la base de datos, utilizar funciones asíncronas, funciones generadoras asíncronas, o .map().

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

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

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.

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

Volver

Ámbito del código

En esta página