sql >> データベース >  >> NoSQL >> MongoDB

マングースはデータベースに複数のアイテムを追加します

    ここでの問題は、findOneにあることです。 コールバック-beerId 常にbeerObjectsの最後のビールに設定されます 、最初のコールバックに到達する前にループが終了するため、非同期javascriptへようこそ。

    これに対する1つの解決策は、findOneをラップすることです。 IFFE(即時呼び出し関数式)のコード。このコードは、beerObjectから次のビールに移る前に完了します。

    ここにIFFEに関するいくつかの詳細があります

    IFFEでのスタックオーバーフロー

    コードをざっと見てみました。これでうまくいくと思いますが、内部コードを調整する必要があるかもしれません...

    for(var i = 0; i < beerObjects.length; i++) {
        console.log(beerObjects[i].beerId);
        //var currentBeer = beerObjects[i]; dont need this now
        (function (currentBeer) {
            Beer.findOne({ beerId: currentBeer},
                function(err, beer) {
                    if(!err && !beer) {
                        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) {
                           // log your error here...
                        });
                    } else if(!err) {
                        console.log("Beer is in the system");
                    } else {
                        console.log("ERROR: " + err);
                    }
                }
            );   
        })(beerObjects[i].beerId);
    }
    



    1. pymongoを使用してmongodbドキュメントを読んで更新するための最良の方法

    2. 一意のユーザーIDのシーケンスを保存するためのMongoDBの自動インクリメント

    3. SQLで日付から日、月、年を取得する方法

    4. マングースリストアイテムがプッシュされるのを待つ方法は?