如何在猫鼬查找功能中使用for循环?

时间:2021-01-29 22:55:34

标签: javascript node.js mongodb for-loop mongoose

这是我的代码:

app.post('/update', async (req, res, done) => {
  let drive = req.app.get('drive');
  let fileId = req.body.id;
  let subject = req.body.subject;
  let grade = req.body.grade;
  let industry = req.body.industry;
  await TagFile.findOne({id: fileId}, (err, res) => {
    if (err) return console.log(err);
    //console.log(res);
    //console.log(subject);
    takeRes(res);
  })
  function takeRes(res) {
    for (let i = 0; i > subject.length; i++) {
      if(!res[0].subject.includes(subject[i])) {
        res[0].subject.push(subject[i]);
        console.log(res[0].subject)
        console.log("first was called")
      }
      else {
        console.log(res[0].subject)
        console.log("else was called.")
      }      
    }
  }
})

这是从我的网站发出的帖子请求。当到达需要使用 for 循环的步骤时,我在控制台中没有从 if else 语句中得到任何信息。我知道这可能与异步有关,但我并不完全理解它,并且希望朝着正确的方向推动。谢谢!

2 个答案:

答案 0 :(得分:0)

当您使用 await 时,您不需要使用 callback 函数。使用以下代码段使用 mongoose 进行查询,其余部分取决于您的业务逻辑:

const res = await TagFile.findOne({id: fileId}).exec();
takeRes(res)

答案 1 :(得分:0)

%d 的结果是 findOne()object 的结果是 find(),当您使用 array 时,findOne() 是不正确的,您可以使用 res[0] 将模型转换为对象,因此使用 find 如下:

lean()

当你使用 let res = await TagFile.find({ id: fileId }).lean(); for (let i = 0; i > subject.length; i++) { if (!res[0].subject.includes(subject[i])) { res[0].subject.push(subject[i]); console.log(res[0].subject); console.log("first was called"); } else { console.log(res[0].subject); console.log("else was called."); } } 时试试这样:

findOne
相关问题