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

Come popolare la mangusta con un set di dati di grandi dimensioni

i è il tuo indice da cui stai estraendo i dati di input in catalogArray , ma stai anche cercando di usarlo per tenere traccia di quanti ne sono stati salvati, il che non è possibile. Prova a seguirli separatamente in questo modo:

var i = 0;
var saved = 0;
Catalog.remove({}, function(err){
    while(i < catalogArray.length){
        new Catalog(JSON.parse(catalogArray[i])).save(function(err, doc){
            saved++;
            if(err){
                console.log(err);
            } else {
                if(saved === catalogArray.length) {
                    return callback('database populated');
                }
            }
        });
        i++;
    }
});

AGGIORNAMENTO

Se desideri aggiungere un controllo del flusso più rigoroso al processo, puoi utilizzare async forEachLimit del modulo funzione per limitare il numero di save in sospeso operazioni a qualsiasi cosa tu specifichi. Ad esempio, per limitarlo a un save in sospeso alla volta:

Catalog.remove({}, function(err){
    async.forEachLimit(catalogArray, 1, function (catalog, cb) {
        new Catalog(JSON.parse(catalog)).save(function (err, doc) {
            if (err) {
                console.log(err);
            }
            cb(err);
        });
    }, function (err) {
        callback('database populated');
    });
}