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