Esto funciona como se esperaba:
let responses = await Response.find({ responder_id: req.user._id, }).populate({ path: "query_id", select: ["query_type", "content"] }); responses = responses.map((response) => { return response.query_id; });
Pero el siguiente no:
let responses = await Response.find({ responder_id: req.user._id, }) .populate({ path: "query_id", select: ["query_type", "content"] }) .map((response) => { return response.query_id; });
Lo único que se me ocurre es que tal vez tenga algo que ver con la naturaleza asíncrona de estas funciones.
La prioridad no es como crees que es. Lo que se espera no es Response.find(...)
, sino Response.find(...).populate(...)
. Con esto en mente, esta es la forma de escribirlo correctamente en la segunda forma (con la única diferencia de un par de paréntesis):
let responses = (await Response.find({ responder_id: req.user._id, }) .populate({ path: "query_id", select: ["query_type", "content"] })) .map((response) => { return response.query_id; });
Sin embargo, sería necesario volver a sangrar para que esto sea legible. El primer fragmento podría ser más fácil de leer de todos modos.