【问题标题】:How to use for loop in mongoose find function?如何在猫鼬查找功能中使用 for 循环?
【发布时间】:2021-01-29 22:55:34
【问题描述】:

这是我的代码:

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 语句中得到任何东西。我知道这可能与异步有关,但我并不完全理解它,并且希望朝着正确的方向前进。谢谢!

【问题讨论】:

  • 当您通过控制台登录res 时,它会给您什么?
  • 在 for 循环之外,我得到了我需要的结果。不过,在 for 循环中,我什么也没得到。甚至没有“未定义的 res”,只是在 for 循环中没有显示任何内容。有任何想法吗? @luckongas
  • 如果你的问题没有解决,请留言,否则接受我的回答

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    findOne() 的结果为objectfind() 的结果为array,当您使用findOne() 时,res[0] 不正确,您可以使用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 时,试试这样:

    let res = await TagFile.findOne({ id: fileId });
    
    for (let i = 0; i > subject.length; i++) {
      if (!res.subject.includes(subject[i])) {
        res.subject.push(subject[i]);
        console.log(resizeTo.subject);
        console.log("first was called");
      } else {
        console.log(res.subject);
        console.log("else was called.");
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2018-08-04
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 2017-06-04
      相关资源
      最近更新 更多