所以我有这个字符串数组,我使用它作为过滤器从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
方法中使用它。
请解释一下你的承诺,对不起,我帮不了你。
如果这解决了你的问题,请标记回答。