Menu Docs

Página inicial do DocsVisualizar & analisar dadosMongoDB Shell

Considerações sobre o script

Nesta página

  • Construtores
  • Funções do gerador
  • Classificação de array
  • Setters 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, 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.

A seguinte configuração 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 });
}
}
← Escopo do código
Trechos →