Así que tengo esta matriz de cadenas que estoy usando como filtro para obtener documentos de MongoDB usando Mongoose. Estoy recuperando con éxito los datos de la base de datos, pero también está devolviendo Promise { <pending> } en la consola aunque estoy ajustando la función de mapa con Promise.all .
Tenga en cuenta que esta función de mapa está anidada dentro de dos niveles de profundidad for in los bucles que estoy omitiendo por simplicidad.
Supongamos que esta es la matriz de cadenas:
const subCategories = [ 'Politics', 'Entertainment' ];Y esta es la función de mapa:
const subCategoryID = await Promise.all( subCategories.map( async item => { try { const data = await SubCategory.findOne( { subCategory: item } ); return data; } catch( e ) { throw err; } })); console.log( subCategoryID );Las promesas hacen que mi cabeza dé vueltas. He intentado aprender Promises más de 5-6 veces en los últimos 1-2 años y todavía me confunde. Entonces, si puede, proporcione una solución con Async/Await.
Si solo quieres el resultado, prueba este enfoque:
const subCategories = [ 'Politics', 'Entertainment' ]; const queries = subCategories.map((i) => { return { subCategory: i }; }); const subCategoryID = await SubCategory.find({ $or: queries, }); console.log(subCategoryID); el uso del operador $or se explica en el manual de mongodb:
El operador
$orrealiza una operación OR lógica en una matriz de dos o más<expressions>y selecciona los documentos que satisfacen al menos una de las<expressions>.
más sobre esto aquí .
En mongoose, puede usarlo en cualquier método de find .
para una explicación sobre su promesa, lo siento, no puedo ayudar.
Por favor marque respondido si esto resuelve su problema.