MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment remplir la mangouste avec un grand ensemble de données

i est votre index vers l'endroit où vous extrayez les données d'entrée dans catalogArray , mais vous essayez également de l'utiliser pour savoir combien ont été enregistrés, ce qui n'est pas possible. Essayez de les suivre séparément comme ceci :

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

MISE À JOUR

Si vous souhaitez ajouter un contrôle de flux plus strict au processus, vous pouvez utiliser le async forEachLimit du module fonction pour limiter le nombre de save en attente opérations à tout ce que vous spécifiez. Par exemple, pour le limiter à un seul save en attente à la fois :

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