Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

173
Visualizações
Espere una consulta en MongoDB

Tengo este método asíncrono escrito en Typescript para consultar, con el controlador nodejs, un MongoDB; el compilador indica que "await" antes de "myConnectedClient" no tiene efecto en el tipo de esta expresión ; Estoy confundido: ¿la llamada al agregado () es asíncrona? Entonces, tengo que esperar, ¿o no?
Gracias.

 async findQuery<T>( collection: string, findParams: Query<T>, sort: Sort<T>, myConnectedClient: MongoClient ) { const firstResult = await myConnectedClient // the compiler indicates await is useless .db("ZZZ_TEST_ALL") .collection("my_collection_01") .aggregate<string>([{ $project: { _id: 0, name: 1 } }]); firstResult.forEach((field) => { console.log(`Field: ${field}`); }); }

ACTUALIZACIÓN: tengo que agregar .toArray() después de la llamada .aggregate(); ¿pero por qué? ¿Alguien me puede explicar el mecanismo? agregado () no tiene devolución de llamada y no devuelve una promesa? ¿Existen alternativas a .toArray()? Gracias.

 // now await it's ok const firstResult = await myConnectedClient .db("ZZZ_TEST_ALL") .collection("my_collection_01") .aggregate<string>([{ $project: { _id: 0, name: 1 } }]).toArray();
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Aggregate está sincronizado y devuelve un AggregationCursor .

El cursor tiene varios métodos asincrónicos para recuperar datos reales: toArray , forEach o simple iterator

En el primer fragmento, firstResult es el cursor, por lo que no es necesario esperar. Utiliza firstResult.forEach para registrar los resultados. Devuelve la promesa, pero la ignora, lo que lo morderá: la promesa devuelta por findQuery se resolverá de inmediato, mientras que forEach iterará los resultados en paralelo. Para mantener la cadena de promesas que debes hacer

 const firstResult = myConnectedClient.......; return firstResult.forEach(......);

por lo tanto, la promesa devuelta por findQuery se resolverá solo cuando se resuelva forEach, por ejemplo, termine de iterar los resultados.

En el segundo fragmento de "actualización", el primer resultado son los datos, por lo que necesita await para obtenerlo de toArray(). El equivalente con cursor explícito sería:

 const cursor = myConnectedClient.......; const firstResult = await cursor.toArray();
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda