2017-12-08 16 views
0

古いMongoDBスキーマのデータを新しいMongoDBスキーマに移行しようとしています。すべてのスキーマがうまくいきます。私が理解できないことは、古い文書が新しい文書として保存される前に変換されていない理由です。私はマップ関数を使って新しいスキーマに変換して保存して、すべてのドキュメントを読んでいます。しかし、新しいスキーマにはまったく変更されていないため、検証に失敗しています。これは非同期の問題ですか?どんな手がかりも素晴らしいだろう。NodeJSのマップ関数が期待通りに機能しない

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(); 
+0

新しいユーザー(makeUser(user.toObject()))を実行しようとしましたが、mongooseはオブジェクトの代わりにドキュメントを返します。 – mrkre

+0

うわー。それはうまくいった、ありがとう。回答を作成したい場合は... – MFB

答えて

3

あなたはnew User(makeUser(user.toObject()))でオブジェクトにモンゴの文書を変換する必要があります。

Mongooseはドキュメントを返すので、明らかではない他の属性を含みます。 console.log(user)を実行すると、通常は出力がtoObjectとなり、混乱する可能性があります。

関連する問題