在map函数中从Mongoose获取文档将返回Promise pending和数据

yhxst69z  于 2023-10-19  发布在  Go
关注(0)|答案(1)|浏览(136)

所以我有这个字符串数组,我用它作为过滤器,用Mongoose从MongoDB获取文档。我成功地从数据库中获取了数据,但它也在控制台上返回了Promise { <pending> },即使我用Promise.all Package 了map函数。
请注意,这个map函数嵌套在两个深度为for in的循环中,为了简单起见,我省略了这个循环。
假设这是一个字符串数组:

const subCategories = [ 'Politics', 'Entertainment' ];

这就是map函数:

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 );

承诺让我头晕。在过去的1-2年里,我已经尝试学习Promises超过5-6次,它仍然让我感到困惑。所以如果可以的话,请提供一个使用Async/Await的解决方案。

dz6r00yl

dz6r00yl1#

如果你只对结果感兴趣,试试这种方法:

const subCategories = [ 'Politics', 'Entertainment' ];

const queries = subCategories.map((i) => {
  return { subCategory: i };
});

const subCategoryID = await SubCategory.find({
  $or: queries,
});

console.log(subCategoryID);

使用$or操作符在mongodb手册中解释:
$or运算符对两个或多个<expressions>的数组执行逻辑OR运算,并选择至少满足<expressions>之一的文档。
更多关于它在这里。
在mongoose中,你可以在任何find方法中使用它。
你的承诺的解释抱歉我帮不上忙
如果这能解决您的问题,请标记为已回答。

相关问题