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



所以我有这个字符串数组,我使用它作为过滤器从MongoDB使用Mongoose获取文档。我成功地从数据库中获取数据,但它也在控制台上返回Promise { <pending> },即使我用Promise.all包装地图函数。

请注意,这个映射函数嵌套在两个层次的深层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年里,我试着学习了5-6次以上的Promises,但它仍然让我感到困惑。所以,如果可以的话,请提供一个Async/Await的解决方案。

如果您只对结果感兴趣,请尝试以下方法:

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>的数组执行逻辑或操作,并选择满足<expressions>中至少一个的文档。

更多信息在这里。

在mongoose中,您可以在任何find方法中使用它。

请解释一下你的承诺,对不起,我帮不了你。

如果这解决了你的问题,请标记回答。

相关内容

  • 没有找到相关文章

最新更新