sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo poblar mangosta con un gran conjunto de datos

i es su índice de donde está extrayendo datos de entrada en catalogArray , pero también está tratando de usarlo para realizar un seguimiento de cuántos se han guardado, lo cual no es posible. Intenta rastrearlos por separado de esta manera:

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++;
    }
});

ACTUALIZAR

Si desea agregar un control de flujo más estricto al proceso, puede usar async forEachLimit del módulo función para limitar el número de save pendientes operaciones a lo que usted especifique. Por ejemplo, para limitarlo a un save pendiente a la vez:

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');
    });
}