Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda