2016-11-29 31 views
0

私は非常に単純な1対多の関係を持っていますが、UserのリストはAlertsです。このために、私は次のスキーマ定義しました:今Mongooseを使用してNode.jsに1対多の関係を格納しています

var userSchema = new Schema({ 
    email: String, 
    alerts: [{type: Schema.Types.ObjectId, ref: 'Alert'}] 
}); 
var User = mongoose.model('User', userSchema); 

var alertSchema = new Schema({ 
    _creator: {type: Schema.Types.ObjectId, ref: 'User'}, 
    value: String, 
}); 
var Alert = mongoose.model('Alert', alertSchema); 

を、私は新しいAlertを作成し、データベースから既存のUserに追加機能を作成しようとしています。私は、次のコード(エラー処理を取り除くので、コードが短くなって)持っている:私は、データベースをチェックするとき

function createAlertForUser(userId, value) { 
    User.findOne({_id: userId}, function (error, user) { 

     var alert = new Alert({ 
      _creator: userId, 
      value: value 
     }); 

     alert.save(function (error, alert) { 

      // push it to the user 
      user.alerts.push(alert); 
      user.save(function(error) { 
       console.log("saved"); 
      }); 
     }); 
    }); 
} 

をしかし、私は警告のユーザーのリストにnull値を保存しているようです。私は何が欠けているすべてのアイデア?

+0

userIdがここで使用されているときに、それがすでにObjectIdであることは確かですか? – Paul

答えて

1

Alertオブジェクト全体をObjectIdの配列にプッシュしようとしました。

代わりにこれを試してみてください:

user.alerts.push(alert.id); 

または

user.alerts.push(alert._id); 

の両方が正しいです。

+0

実際にオブジェクトの代わりにidを押すことは根本的な問題でした。 – Henrique

関連する問題