MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como preencher o mangusto com um grande conjunto de dados


i é o seu índice de onde você está puxando os dados de entrada em catalogArray , mas você também está tentando usá-lo para acompanhar quantos foram salvos, o que não é possível. Tente rastreá-los separadamente assim:
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++;
    }
});

ATUALIZAÇÃO

Se você deseja adicionar um controle de fluxo mais rígido ao processo, pode usar o async módulo forEachLimit função para limitar o número de save pendentes operações para o que você especificar. Por exemplo, para limitar a um save pendente de uma 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');
    });
}