sql >> Database >  >> NoSQL >> MongoDB

Mongoose voegt meerdere items toe aan database

Het probleem hier is dat in de findOne terugbellen - uw beerId wordt altijd ingesteld op het laatste biertje in beerObjects , omdat de lus eindigt voordat je bij je eerste callback komt - welkom bij asynchrone javascript.

Een remedie hiervoor is om uw findOne . in te pakken code in een IFFE (Immediately Invoked Function Expression). Deze code wordt voltooid voordat u doorgaat naar het volgende bier van beerObject.

Hier is wat meer informatie over IFFE

Stack Overflow op IFFE

Ik heb de code snel doorgenomen, ik denk dat dit zou moeten werken, maar het kan zijn dat je wat aanpassingen moet maken met de interne code...

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. Spring Boot verbindt Mysql en MongoDb

  2. Hoe kan ik mijn gegevens op mongoDB opslaan met expressjs?

  3. NoSql-referentiegegevens

  4. Mongodb bespaart een dag minder - Tijdzoneprobleem