2016-11-29 2 views
0

Ich habe eine sehr einfache Beziehung von eins zu vielen, wo eine User eine Liste von Alerts hat. Dazu habe ich die folgenden Schemata definiert:Speichern einer Eins-zu-Viele-Beziehung in Node.js mit Mungo

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); 

Nun, ich versuche, eine Funktion zu erstellen, die ein neues Alert erstellt und fügt sie zu einem vorhandenen User aus der Datenbank. Ich habe den folgenden Code (Entfernen von Fehlerbehandlung so dass der Code kürzer):

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"); 
      }); 
     }); 
    }); 
} 

Allerdings, wenn ich die Datenbank zu überprüfen, scheine ich NULL-Werte auf die Benutzerliste von Warnungen zu speichern. Irgendwelche Ideen was ich vermisse?

+0

Sind Sie sicher, dass userId bereits eine ObjectId ist, wenn sie hier verwendet wird? – Paul

Antwort

1

Sie versuchen, ein ganzes Objekt Alert auf ein Array von ObjectId zu schieben.

Versuchen Sie stattdessen:

user.alerts.push(alert.id); 

oder

user.alerts.push(alert._id); 

beide korrekt sind.

+0

In der Tat drängte die ID anstelle des Objekts war das zugrunde liegende Problem. – Henrique

Verwandte Themen