我想检查数据库中是否存在数据。如果假设数据存在则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
}
执行if循环后,值不会打印为1
或-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
注意:该算法本身看起来很奇怪,因为对 global.k
的每次赋值都会覆盖之前分配的值。变量 k
的名称也无助于理解其用途。
如果您需要在所有查询返回匹配项时将其设置为 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)
。所以一定要检查你的逻辑。
关于javascript - 检查数据库mongodb Node js中是否存在多个数据数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54958662/