我正在为教师和学生建立一个带有聊天室的网络应用程序。老师将邀请他们的学生参加该计划,因此,我需要验证学生是否已经拥有一个帐户。
我已经在互联网上搜寻解决方案,但是没有一个解决方案与我的问题
function insertUsers(collectionName, userArray) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('squeakdb');
for (var i=0; i<userArray.length; i++) {
dbo.collection(collectionName).find({ studentId: userArray[i].studentId }).toArray(function (err, res) {
console.log(res == '');
// If res == '' is true, it means the user does not already have an account
if (res == '') {
dbo.collection(collectionName).insertOne(userArray[i], function(error, result) {
if (error) throw error;
console.log('Inserted');
});
}
});
}
});
}
insertUsers('userlist', [{ 'studentId': 'STU0001' }, { 'studentId': 'STU0018', 'firstName': 'testName' }]);
预期结果是将数组中的第一个对象不插入数据库,而将第二个对象插入。
当前结果是未插入第一个对象(按预期),第二个对象产生以下错误:
TypeError:无法读取未定义的属性“ _id”
答案 0 :(得分:0)
我发现了发生错误的原因,该错误是由于在for循环内进行异步调用引起的。这是固定代码。
function insertUsers(collectionName, userArray) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('squeakdb');
userArray.forEach(function (index){
dbo.collection(collectionName).find({ studentId: index.studentId }).toArray(function (err, res) {
console.log(res.length == 0);
if (res.length == 0) {
dbo.collection(collectionName).insertOne(index, function(error, result) {
if (error) throw error;
console.log('Inserted');
});
}
});
});
});
}