Menu Docs
Página inicial do Docs
/
MongoDB Shell
/

Considerações sobre o script

Nesta página

  • Construtores
  • Funções do gerador
  • Classificação de array
  • Configuradores de JavaScript

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 matriz

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

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

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

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.

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

Voltar

Escopo do código