2017-02-21 1 views
0

Hier möchte ich einen Datensatz bekommen und ich muss den gleichen Datensatz mit leichten Änderungen einfügen. Aber ich kann die Daten in meinem neuen Datensatz nicht sehen, die ich in meinem Datensatz gefunden habe. Hier ist, was ich versucht habe, kann mir jemand helfen? Ich denke, das Problem mit dieser Linie ist var institution = new Institution(data);:Wie finde ich einen Datensatz und füge denselben Datensatz in Mongoose ein?

Institution.find({_id:i._id}).exec(function (err, result) { 
       if(result) 
       transferData(result); 
       } 
      }); 
      }); 
     } 

     function transferData(data){ 
     var institution = new Institution(data); 
      institution.name = 'xxxx'; 
      institution.save(function (err, data) { 
      if (err) { 
       return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); 
      } else { 
       console.log('Data Inserted Successfully'); 
      } 
      }); 
     } 

Antwort

0

find() gibt einen Array von docs, die die Kriterien in der Callback entsprechen somit die Linie

var institution = new Institution(data); 

wird nicht funktionieren, da es ein Dokument erwartet kein Array.

könnten Sie verwenden findById() Methode wie:

Institution.findById(i._id).exec(function (err, result) { 
    if (result) transferData(result); 
});   

function transferData(data) { 
    var institution = new Institution(data); 
    institution.name = 'xxxx'; 
    institution.save(function (err, data) { 
     if (err) { 
      return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); 
     } else { 
      console.log('Data Inserted Successfully'); 
     } 
    }); 
} 

Ein viel besserer Ansatz der findByIdAndUpdate() Verfahren beinhalten würde:

Institution.findByIdAndUpdate(i._id, {name: 'xxxx'}, {upsert: true}, function (err, data) { 
    if (err) { 
     return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); 
    } else { 
     console.log('Data Inserted Successfully'); 
    } 
); 
+0

Hallo chridam, wird diese Methode, findByIdAndUpdate Einsatz ein neuer Rekord? – Daniel

+0

Ja, wenn Sie die Option '{upsert: true}' als Parameter angeben, wie oben beschrieben. – chridam

+0

Chidram, es ist nicht ein neues Reocrd, aber updatin, tut mir leid, wenn ich nicht richtig erklären, meine Anforderung ist, wenn ich einen Datensatz finden, dann sollte der gleiche Datensatz als neue mit Namensänderung eingefügt werden. – Daniel

Verwandte Themen