2017-02-15 1 views
0

Je suis en train d'importer environ 60 000 enregistrements dans MongoDb en utilisant le schéma Mongoose provenant de différents fichiers source. Maintenant, je voulais effectuer une exportation dans le fichier texte des enregistrements sélectionnés (en appliquant également des validations sur les champs - par exemple, il y a deux champs dans le schéma mongoose email1 et email2. fichier pour chaque enregistrement). J'ai référé le plugin mongoose-to-csv. Existe-t-il d'autres plugins ou méthodes disponibles pour cette exportation vers des fichiers txt?Exporter un grand nombre de documents dans un fichier texte en utilisant mongoose

Et oui j'ai essayé d'utiliser le module fs.

Je veux que le résultat ressemble à ceci dans un document txt.

"ID","First_Name","Last_Name","Email" 
123,ABC, DEF, [email protected] 
456,GHI, JKL, [email protected] 
..... 

mon code a été

Model.find({"ID":{$exist:true}},function(error,result) 
{  
var csv = json2csv({data:results, fields:fields, hasCSVColumnTitle:true}); 
fs.writeFile('TestFile.csv',csv,function(err) 
{ 
}); 
}); 

Peut-on écrire ces valeurs séparées par des virgules dans un fichier texte?

+0

Pouvez-vous utiliser le module fs pour écrire le fichier et avez-vous des validations dans votre code? –

Répondre

0

Je n'ai pas réellement testé le code mais cela devrait fonctionner correctement (peut-être avec de petits changements) et devrait vous aider à avoir l'idée. Cette implémentation utilise des flux qui traiteront et écriront automatiquement les données. Beaucoup plus évolutif que de tout mettre en mémoire. De 2.4.0. version, mongoose prend en charge les flux. event-stream est une excellente bibliothèque pour manipuler les données du flux.

var es = require('event-stream'); 
var fs = require('fs'); 
var wstream = fs.createWriteStream('TestFile.csv'); 

Model.find({"ID":{$exist:true}).stream() 
.pipe(es.map(function (data, cb) { 
     var formated = data; 
     formated.email = data.email1 || data.email2; 
     var csv = json2csv({data:formated, fields:fields, hasCSVColumnTitle:true}); 
     cb(null, csv) 
    })) 
.pipe(wstream); 
+0

Cela fonctionne. Je vous remercie. – Suji