Ich muss Datensätze in zwei Sammlungen einfügen. Die zweite Sammlung speichert die ID der Datensätze der ersten Sammlung. Es ist eine 1: m (fistert: zweite) Situation. Der Auslöser ist die zweite Kollektion:Mongoose: Fügen Sie eine Sammlung von einer anderen mit Versprechen
- Wenn ein Datensatz für die zweite Sammlung benötigt
- Prüfung abgelegt werden, wenn bereits ein passender Datensatz in der ersten Kollektion
- wenn nicht: dann eine in dem Speicher erste Kollektion
- speichern die zweite Kollektion
- die ID des Datensatzes der ersten Sammlung in der zweiten Sammlung speichern
Das folgende Beispiel scheint diese Schritte zu erfüllen. Aber ich habe die Versprechungen nur auf halbem Wege. Wie kann dies besser "versprochen" werden?
saveObjects(name: String, objects: Array<IObject>){
var promise = FirstModel.findOne({Name : name}).exec();
promise.then(function(res1){
if (!res1){
var la = new FirstModel();
la.Name = name;
la.save(function(err){
if (err) throw err;
})
}
}).error(function(err){
throw err;
})
objects.forEach(function(obj) {
FirstModel.findOne({Name : name},'_id',function(err, res2){
if (err) throw err;
var vo = new SecondModel();
vo.Name = name;
vo.FistID = res2._id;
vo.save(function(err){
if (err) throw err;
});
});
});
}
Aber die Referenz 'vo.FistID = res1._id;' zum FirstModel, wirft anerror in dem obigen Beispiel, da res1._id nicht in der ist Bereich im .then Teil. Aus diesem Grund habe ich an diesem Ort eine weitere Lektüre von FirstModel gemacht. Gibt es einen besseren Weg, dies zu tun? – MBushveld
res1 ist in der zweiten then() definiert, so sollte es gut funktionieren. Wir übergeben Res1 von der ersten() zu der zweiten. Wenn Sie einen Fehler bekommen, fügen Sie ihn hier ein, damit ich sehen kann, was es ist. Wenn Sie direkt kopieren/einfügen, sollten Sie wissen, dass ich gerade einen kleinen Syntaxfehler behoben habe, so dass Sie es erneut versuchen sollten. – grimurd
Der Fehler, den ich bekomme, ist 'error TS2339: Eigenschaft '_id' existiert nicht am Typ '{}'. Dies scheint für mich zu sein, dass res1 im zweiten Teil nicht bekannt ist. – MBushveld