var data = [] for (var index = 0 ; index < catalogss.length ; index ++) { for (let i = 0 ; i < wordsArray.length ; i++ ){ Catalog.aggregate([ {$match: {“catalog”: catalogss[index],“books.vocabulary”: { $in:[wordsArray[i]] }}}, {"$project": { _id:"$catalog", size:{"$size":"$books.vocabulary"} }} ]).exec((err,docs) => { if (err){ console.err(err) } console.log(docs) data.push(docs[0]) }) } } 这段代码中,执行query的部分是异步的,我还不会用,希望可以得到帮助~~
代码这么难看,不帮 先去学一下怎么用markdown吧
@zengming00 我更新了图片
用Promise.all
来自酷炫的 CNodeMD
async function test (catalogss, wordsArray) {
var data = [];
for (var index = 0; index < catalogss.length; index++) {
for (let i = 0; i < wordsArray.length; i++) {
const docs = await Catalog.aggregate([{
$match: {
'catalog': catalogss[index],
'books.vocabulary': {
$in: [wordsArray[i]]
}
}
},
{
'$project': {
_id: '$catalog',
size: {
'$size': '$books.vocabulary'
}
}
}
]).exec();
if (docs && docs.length) {
data.push(docs[0]);
}
}
}
return data;
}
test(catalogss, wordsArray).then(data => {
console.log(data)
});
类似这样子的,试试呢
From Noder
@jiangli373 这样不并行,查询会慢
来自酷炫的 CNodeMD
把你的查询变成一个方法 然后用promise.all 就行了 这个的话就是并行执行你的查询 而且可以去到每一个查询的结果
谢谢各位的帮助,我解决了
来自酷炫的 CNodeMD