sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose lägger till flera objekt till databasen

Problemet här är att i findOne callback - ditt beerId kommer alltid att vara inställd på den sista ölen i beerObjects , eftersom slingan avslutas innan du kommer till din första återuppringning - välkommen till asynkront javascript.

En lösning för detta är att linda in din findOne kod i en IFFE (Immediately Invoked Function Expression). Denna kod kommer att slutföras innan du går vidare till nästa öl från beerObject.

Här är lite mer information om IFFE

Stack Overflow på IFFE

Jag tog en snabb passning på koden, jag tror att det här borde fungera, men du kanske måste göra några justeringar med den interna koden...

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. MongoDump-fråga med BinData

  2. Få MongoDB på Linux att lyssna på fjärranslutningar

  3. Redis och Node.js och Socket.io Frågor

  4. Ställa in MongoDB-anslutning med Airflow