MongoDB错误“无法读取未定义的属性” _id”

时间:2019-07-04 05:06:35

标签: javascript node.js mongodb

我正在为教师和学生建立一个带有聊天室的网络应用程序。老师将邀请他们的学生参加该计划,因此,我需要验证学生是否已经拥有一个帐户。

我已经在互联网上搜寻解决方案,但是没有一个解决方案与我的问题

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”

1 个答案:

答案 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'); 
                   }); 
                }
            });
        });
    });
}