sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose přidat více položek do databáze

Problém je v tom, že v findOne zpětné volání – vaše beerId bude vždy nastaveno na poslední pivo v beerObjects , protože smyčka skončí dříve, než se dostanete k prvnímu zpětnému volání – vítejte v asynchronním javascriptu.

Jedním z řešení je zabalit váš findOne kód v IFFE (Immediately Invoked Function Expression). Tento kód bude dokončen před přechodem na další pivo z beerObject.

Zde je několik dalších informací o IFFE

Přetečení zásobníku na IFFE

Rychle jsem si prošel kód, věřím, že by to mělo fungovat, ale možná budete muset provést nějaké úpravy v interním kódu...

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. Problém s kompasem MongoDB s WSL2

  2. Jak vybrat pouze odpovídající dílčí dokument mongodb pomocí pythonu

  3. MongoDB Collection runCommand z PHP

  4. Mám dotaz mongodb a chci najít přesnou shodu slova „Schváleno“