我遇到了猫鼬findOne循环的麻烦。
我有一个ObjectID数组,我需要获得文档的另一个值( value关键字)--这是我到目前为止所拥有的:
let qarray = []
for (var i = 0; i < req.body.keyword.length; i++) {
let pushy = db.collection('keywords').findOne({ "_id": req.body.keyword[i]})
qarray.push(pushy.keyword)
console.log(pushy); // for debugging purpose
console.log(req.body.keyword[i]); // for debugging purpose
}
console.log(qarray);
其结果是:
Promise { <pending> }
60ab81c5be36d74968e23d14
Promise { <pending> }
60a77893b015d85f38a3323f
[ undefined, undefined ]编辑
我使用了循环解决方案,但我对异步函数不太熟悉.
async function fetchSomeStuff(expTemp){
let qarray = []
for (var i = 0; i < expTemp.keywordid.length; i++) {
console.log(expTemp.keywordid);
console.log(db.collection('keywords').findOne({ _id: expTemp.keywordid[i]}));
let pushy = await db.collection('keywords').findOne({ _id: expTemp.keywordid[i]})
.catch(error => console.error(error))
.then(qarray.push(pushy.keyword))
}
console.log(qarray);
}
这给了我这些问题信息:
承诺{待决}
ReferenceError:无法在初始化前访问“pushy”
我想我得等数据库取出,然后放进我的数组中,我肯定遗漏了一些东西
发布于 2021-06-01 16:11:42
使用$in代替
async function fetchSomeStuff(){
const pushy = await db.collection('keywords').find({"_id" : { $in : req.body.keyword}});
return pushy;
}或者如果您仍然想循环并使用findOne()
async function fetchSomeStuff(){
let qarray = []
for (var i = 0; i < req.body.keyword.length; i++) {
let pushy = await db.collection('keywords').findOne({ "_id": req.body.keyword[i]})
qarray.push(pushy.keyword)
console.log(pushy); // for debugging purpose
console.log(req.body.keyword[i]); // for debugging purpose
}
console.log(qarray);
}https://stackoverflow.com/questions/67792324
复制相似问题