在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尝试过,但也无法在函数外返回(。归还这些文件的最佳方式是什么?

您可以使用.map()创建一个id数组,然后使用$in运算符在一个查询中查找所有id。类似于:

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

forEach不是异步的,可以用于循环

for (const person of persons ) {
const outputs = await Output.find({ person: person['id']  })
console.log(outputs) // this works
return outputs
}

尝试map

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

如果要记录组合输出,则需要在异步函数中调用log。

const Output =  {
find(obj) {
return obj;
}
}
const projects = {
people: [{
_id: 1
}, {
_id: 2
}]
}
const myFunction = async() => Promise.all(projects.people.map(person => Output.find({
person: person._id
})));
async function log() {
console.log(await myFunction());
}
log();

最新更新