このコードには2つの問題があります。 1)ビールオブジェクトの最後の要素のみがデータベースに保存されます。 2)データベースに最後に保存された要素(n = beerObjects.length)のn個の複製があります。Mongooseデータベースに複数の項目を追加
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;
}
});
}
});
}
}
私は、各ビールをループにしたいし、データベースにその情報を保存します。重複を防ぐためにfindOneを使用しましたが、これは機能しません。最初のconsole.log()ステートメントは各ビールIDを表示しますが、console.log()ステートメントは最後のビールIDだけを複数回表示します。ループが終了するので、あなたがあなたの最初のコールバックに入る前に、あなたのbeerId
は常に、beerObjects
で最後のビールに設定されます - - 非同期JavaScriptに歓迎ここ