NodeJS中的Map函数未按预期工作

时间:2017-12-08 07:31:22

标签: javascript node.js mongoose

我正在尝试将旧的MongoDB架构中的一些数据迁移到新架构。所有架构的东西都运行正常。我无法理解的是为什么旧文档在被保存为新文档之前没有被转换。我正在阅读所有文档,使用map函数将它们转换为新模式然后保存它们。但是它们都没有通过验证,因为事实证明,它们根本没有被修改为新架构。这是一个异步问题吗?任何线索都会很棒。

let User = require('./api/models/user.model');

let newUser;
let mapUsers = () => {

    let makeUser = (u) => {
        return {
            firstName: u.first_name,
            lastName: u.last_name,
            avatarUrl: u.avatar_url,
            email: u.email,
            loginCount: u.login_count,
            loginTime: u.login_time,
            logoutTime: u.logout_time
        }
    };
    h2User.find({}).limit(1).exec((err, users) => {
        if (err) {
            console.error(err);
        } else {
            users.map(user => {
                newUser = new User(makeUser(user));  // like this doesn't work
                newUser.save((err, nu) => {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log(nu._id)
                    }
                });
            });
        }
    });
};

mapUsers();

1 个答案:

答案 0 :(得分:3)

您必须将Mongo文档转换为new User(makeUser(user.toObject()))的对象。

当Mongoose返回文档时,它将包含其他可能不明显的属性。执行console.log(user)时,它通常会打印toObject的输出,因此会让人感到困惑。