猫鼬问题中的 findOne 循环

时间:2021-06-01 16:03:40

标签: javascript node.js mongodb loops mongoose

我在循环 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”

我想我必须等待数据库获取然后放入我的数组中,而且我肯定会遗漏一些东西

1 个答案:

答案 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);
}