sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose tilføjer flere elementer til databasen

Problemet her er, at i findOne tilbagekald - dit beerId vil altid være indstillet til den sidste øl i beerObjects , fordi løkken afsluttes, før du når dit første tilbagekald - velkommen til asynkront javascript.

Et middel til dette er at indpakke din findOne kode i en IFFE (Immediately Invoked Function Expression). Denne kode vil fuldføre, før du går videre til den næste øl fra beerObject.

Her er lidt mere info om IFFE

Stack Overflow på IFFE

Jeg gik hurtigt igennem koden, jeg tror, ​​det burde virke, men du skal muligvis foretage nogle justeringer med den interne kode...

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. Mongo DB-aggregering med en række objekter

  2. Begrænser du resultater i MongoDB, men får du stadig hele optællingen?

  3. Fejl ved opbygning af Mongodb på ubuntu-server

  4. mongodb - hvordan man finder og derefter samler