Mongoose .create()没有将条目保存到db

时间:2016-08-28 20:02:07

标签: node.js mongodb mongoose

我的种子文件应该将2个用户引入我的MongoDB。我的 db.User.remove()肯定会删除我的数据库中的所有现有用户,所以我正在访问正确的数据库。但是, newUser.save()实际上并没有保存记录。

我的console.log显示已生成来自user_list的我的2个用户对象,但我的newUser.save()实际上并没有将新记录保存到User集合(它完全为空)。有什么想法吗?

seed.js

// remove all users
db.User.remove({}, function(err, users){
    if(err) {
    console.log('Error occurred in remove', err);
    } else {
        console.log('removed all users');
        // create new records based on the array user_list
        for (i=0; i < user_list.length; i++) {
            var newUser = new User();
            // set the user's local credentials
            newUser.email = user_list[i].email;
            newUser.password = createHash(user_list[i].password);
            newUser.company = user_list[i].company;
            newUser.firstName = user_list[i].firstName;
            newUser.lastName = user_list[i].lastName;
            newUser.admin = user_list[i].admin;
            console.log(newUser);
            // save the user
            newUser.save(function(err, users) {
                if (err){
                    console.log('Error in Saving user: '+ err);  
                    throw err; 
                } 
            });
        }
        console.log("created", user_list.length, "users");
        process.exit();
    }
});

2 个答案:

答案 0 :(得分:1)

save操作是异步的(非阻塞),因此,process.exit();将先执行,然后保存操作。 user_list似乎是一个包含静态数据的数组。请尝试记录users变量或save回调中的任何标记。

解决此问题的方法是聚合并使用承诺或检查save回调中的最后一位用户。

答案 1 :(得分:0)

正如Konstantin所说,process.exit()在保存之前被调用。有更好的解决方案,但简单的答案是通过添加一个计数器延迟process.exit():

// remove all users
db.User.remove({}, function(err, users){
    if(err) {
    console.log('Error occurred in remove', err);
    } else {
        console.log('removed all users');
        // create new records based on the array user_list
        var count = 1;
        for (i=0; i < user_list.length; i++) {
            var newUser = new User();
            // set the user's local credentials
            newUser.email = user_list[i].email;
            newUser.password = createHash(user_list[i].password);
            newUser.company = user_list[i].company;
            newUser.firstName = user_list[i].firstName;
            newUser.lastName = user_list[i].lastName;
            newUser.admin = user_list[i].admin;
            console.log(newUser);
            // save the user
            newUser.save(function(err, users) {
                count += 1;
                if (err){
                    console.log('Error in Saving user: '+ err);  
                    throw err; 
                } else if (count == user_list.length) {
                    process.exit();
                }
            });
        }
        console.log("created", user_list.length, "users");
    }
});