2017-02-21 2 views
0

Здесь я хочу получить запись, и мне нужно вставить одну и ту же запись с небольшими изменениями. Но я не могу видеть данные в своей новой записи, которые я нашел в своей записи. Вот что я пробовал, может ли кто-нибудь мне помочь? Я думаю, что проблема с этой линией var institution = new Institution(data);:Как найти запись и вставить ту же запись в Mongoose?

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

ответ

0

find() возвращает массив документов, которые соответствуют критериям, установленным в функции обратного вызова, следовательно, линиях

var institution = new Institution(data); 

не будет работать, как он ожидает документ а не массив.

Вы можете использовать findById() метод как:

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

Гораздо лучше подход включает метод findByIdAndUpdate():

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

Hi chridam, будет этот метод, findByIdAndUpdate вставки новый рекорд? – Daniel

+0

Да, если вы укажете опцию '{upsert: true}' в качестве параметра, как в приведенном выше правиле. – chridam

+0

Chidram, его не вставляя новый reocrd, но updatin, извините, если я не смог объяснить правильно, мое требование - если я найду запись, тогда одна и та же запись должна быть вставлена ​​как новая с изменением имени. – Daniel

Смежные вопросы