首页 > 解决方案 > 在 foreach 循环中返回带有异步查询的文档

问题描述

我正在遍历一个对象以查找 id 编号,然后从 mongodb 查找并返回相关文档。

我可以在 forEach 函数中控制文档,但我无法返回它们,我很难理解为什么。这是我的功能......

let myFunction = projects.people.forEach(async function (person) {
    const outputs = await Output.find({ person: person._id })
    console.log(outputs) // this works
    return outputs
})
console.log(myFunction) // this does not work

我不确定我做错了什么,如果这是因为它是异步的,还是因为它是一个 forEach(我用 for/of 尝试过,但也无法让它在函数之外返回)。退回这些文件的最佳方式是什么?

标签: node.jsmongodbmongoose

解决方案


您可以使用.map()创建一个 id 数组,然后使用$in运算符在一个查询中找到所有这些。就像是:

let myFunction = await Output.find({ 
  person: {
    $in: projects.people.map(person => person._id) 
  }
});
console.log(myFunction)

推荐阅读