检查数据库mongodb节点js中是否存在多个数据数组?

时间:2019-03-02 12:45:45

标签: javascript node.js express

我要检查数据库中是否存在数据。如果假设数据存在,则将k的值设置为1

global.k = 0
va roll = {roll0:"1616",roll1:"234"}
for (let i = 0; i < inputcount; i++) {
  var obj1 = roll["roll" + i];

  const find = async() => {
    const item = await RegisterUser.find({ eventname: event_name, rollno: obj1 })
    if (item.length != 0) {
      global.k = 1
      console.log(global.k)
    } else {
      global.k = -1
      console.log(global.k)
    }
  }
  find()
}
  console.log(global.k)
if(global.k==0){
  // code for save
}

如果执行了循环,则该值不会打印为1-1。实际上,我认为问题出在异步。请帮助我

1 个答案:

答案 0 :(得分:1)

您致电find,但不等待其结果。最好使async的功能可以包裹整个循环:

const find = async() => {
  global.k = 0    
  for (let i = 0; i < inputcount; i++) {
    var obj1 = roll["roll" + i];    
    const item = await RegisterUser.find({ eventname: event_name, rollno: obj1 })
    if (item.length != 0) {
      global.k = 1
      console.log(global.k)
    } else {
      global.k = -1
      console.log(global.k)
    }
  }
  console.log(global.k);
  if (global.k == 0) {
     // save...
  }
}
find() // Don't put any code below this line. Put it at the end of the function above

NB:算法本身看起来很奇怪,因为对global.k的每次分配都会覆盖之前分配的值。变量k的名称也无助于了解其用途。

如果在 all 查询返回匹配项时需要将其设置为1,请在此处添加break

    } else {
      global.k = -1
      console.log(global.k)
      break;
    }

如果在至少一个查询返回匹配项时需要将其设置为1,则在此处添加break

    if (item.length != 0) {
      global.k = 1
      console.log(global.k)
      break;
    }

此外,if (global.k == 0)结尾的检查很奇怪,因为这等效于进行if (inputcount == 0)。因此,请务必检查您的逻辑。