mongodb 如何通过一个id数组来查找mongoose

2vuwiymt  于 2022-12-12  发布在  Go
关注(0)|答案(2)|浏览(164)

这是我代码:

const query = await Users.findOne({_id: userId}, 'groups');

const arrayOfGroups = [];

//query.groups is an array of strings that contains id´s
await Promise.all([query.groups.forEach(async function (groupId){
   const atributtesOfGroup = await Group.findById(groupId);
   const {grade, group, career} = atributtesOfGroup;
   arrayOfGroups.push(grade + '°' + group + '\n' + career);
})]);

我尝试通过id的数组(query.groups)来查找文档,并将这些文档放入数组“arrayOfGroups”中
我也尝试了一个查询与$or,但它没有工作
一些想法?我只需要一个数组,看起来像这样[等级+ '°' +组+ '\n' +职业,等级+ '°' +组+ '\n' +职业,等级+ '°' +组+ '\n' +职业,...]

yzxexxkh

yzxexxkh1#

你不必在循环中调用异步函数,只需使用$in操作符就可以得到预期的输出。

const user = await Users.findOne({_id: userId}, 'groups').lean()
    
    const allGroups = await Group.find({ _id: { $in: user.groups } }).lean()
    
    const arrayOfGroups = allGroups.map((group) => `${group.grade}°${group.group}'\n'${group.career}`)
    
    console.log(arrayOfGroups)
dl5txlt9

dl5txlt92#

一个forEach不返回任何东西,你需要使用map-函数,它返回一个promise数组,所以你不需要把[...]作为参数添加到你的Promise.all中。
您也可以直接在内部函数中返回文本字符串,而无需预先定义arrayOfGroups

相关问题