Bu kodla ilgili iki sorunum var. 1) Sadece beerObjects öğesinin son elemanı veritabanına kaydedilir. 2) Veritabanına kaydedilen son öğenin (n = beerObjects.length) n kopyası vardır.Mongoose veritabanına birden çok öğe ekle
function addBeersToDatabase(beerObjects) {
for (i = 0; i < beerObjects.length; i++) {
console.log(beerObjects[i].beerId);
var currentBeer = beerObjects[i];
// check if beer is already in database
Beer.findOne({'beerId': currentBeer.beerId}, function(err, beer){
if (err) {
handleError(err);
}
if (beer) {
// beer is already in database
}
else {
// add new beer to database
console.log(currentBeer.beerId);
var newBeer = new Beer();
newBeer.beerId = currentBeer.beerId;
newBeer.name = currentBeer.name;
newBeer.description = currentBeer.description;
newBeer.abv = currentBeer.abv;
newBeer.image = currentBeer.image;
newBeer.save(function(err) {
if (err) {
throw err;
}
});
}
});
}
}
Her bira içinde döngü istiyorum ve veritabanına onun bilgi kaydedin. Çiftleri önlemek için findOne kullandım ama bu çalışmıyor. İlk konsol.log() ifadesi her bira kimliğini yazdırır ancak saniye konsol.log() ifadesi birkaç kez sadece son bira kimliğini yazdırır. asenkron javascript karşılama - Eğer ilk geri arama ulaşmadan döngü tamamlandığında oluyor, çünkü beerId
daima beerObjects
son bira ayarlanır - burada