我在循环 mongoose 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);
}
这给了我这些问题的消息:
承诺 '{ pending }'
参考错误:初始化前无法访问“pushy”
我想我必须等待数据库获取然后放入我的数组中,而且我肯定会遗漏一些东西
答案 0 :(得分:1)
改用 $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);
}