Considerações sobre o script
Os resultados das queries do banco de dados não podem ser passados dentro dos seguintes contextos:
Funções do construtor de classes
Funções de gerador não assíncronas
chamada de resposta para
.sort()
em uma matrizSetters de JavaScript em classes
Para acessar os resultados de chamadas de banco de dados de dados, use funções assíncronas, funções de gerador assíncronas ou .map()
.
Construtores
Os seguintes construtores não funcionam:
// 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(); } }
Em vez disso, use uma função async
:
class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); } }
Observação
Você também pode criar um método que executa uma operação do banco de dados dentro de uma classe como uma alternativa para trabalhar com JavaScript assíncrono.
class FindResults { constructor() { } init() { this.value = db.students.find(); } }
Para usar essa classe, primeiro construa uma instância de classe e depois chame o método .init()
.
Funções do gerador
As seguintes funções do gerador não funcionam:
// This code will fail function* FindResults() { yield db.students.findOne(); } // This code will fail function listEntries() { return db.students.findOne(); } function* findResults() { yield listEntries(); }
Use um async generator function
em vez disso:
function listEntries() { return db.students.findOne(); } async function* findResults() { yield listEntries(); }
Classificação de array
A seguinte classificação de array não funciona:
// This code will fail db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() ) } );
Em vez disso, use .map()
.
db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() }; } ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size; } ).map( collection => collection.collectionName);
Essa abordagem para a classificação de array geralmente é mais eficiente do que o código equivalente sem suporte.
Configuradores de JavaScript
O seguinte configurador JavaScript não 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 }); } }