Al cargar una sola imagen, es decir, uploadResults solo tiene un objeto: lo siguiente funciona bien.
Al cargar varias imágenes no lo hace. El objeto de imagen se crea correctamente en la base de datos, pero el objeto de álbum tiene imágenes repetidas. Por ejemplo, si subo image1 e image2, album.Images debería ser simplemente [image1, image2] pero en su lugar será [image1, image2, image2]. Creo que el problema es el momento de las devoluciones de llamada dentro de foreach, pero no puedo identificar el problema.
uploadResults.forEach(function(uploadedItem) { var image = new Images({ imageUrl: uploadedItem.url, }); image.save(function (err, doc) { album.Images.push(doc.id); album.save(function(err, doc) { //err handling... }); }); });¿Por qué estás guardando el álbum en cada iteración? Use Promise (probablemente necesite un polyfill para all ). Utilice es6-promesa :
const Promise = require('es6-promise').Promise; let promises = []; uploadResults.forEach(uploadedItem => { let promise = new Promise((resolve, reject) => { let image = new Images({ imageUrl: uploadedItem.url, }); image.save((err, doc) => { album.Images.push(doc.id); // No saving here }); }); promises.push(promise); }); Promise .all(promises) .then(() => { album.save((error, doc) => { // rest of code }); });Logré que funcionara solo ejecutando album.save() en la iteración final.
uploadResults.forEach(function(uploadedItem, idx, array) { var image = new Images({ imageUrl: uploadedItem.url, }); image.save(function (err, doc) { album.Images.push(doc.id); if (idx === array.length - 1) { album.save(function(err, doc) { //err handling... }); } }); });