2017-02-15 7 views
0

다른 소스 파일의 Mongoose 스키마를 사용하여 MongoDb로 가져온 레코드가 약 60,000 개 있습니다. 이제 선택한 레코드의 텍스트 파일로 내보내기를 수행하려고합니다 (예 : 필드에 대한 유효성 검사 적용 - 예 : mongoose 스키마 email1과 email2의 두 필드가 있음) 전자 메일 1과 전자 메일 2 중 하나를 내보내기 필드 (전자 메일)로 선택해야합니다. 각 레코드에 대한 파일). 플러그인 mongoose-to-csv를 언급했습니다. 다른 플러그인이나 txt 파일로 내보낼 수있는 방법이 있습니까?몽구스를 사용하여 많은 수의 문서를 텍스트 파일로 내보내기

그리고 나는 fs 모듈을 사용해 보았습니다.

나는 txt 문서에서 이와 비슷한 결과를 원합니다.

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

내 코드

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

우리는 텍스트 파일에 값을 쉼표로 구분 된 이들은 쓸 수 있었다?

+0

fs 모듈을 사용하여 파일을 쓰고 코드에서 유효성을 검사 할 수 있습니까? –

답변

0

코드를 실제로 테스트하지는 않았지만 약간의 변경이 필요할 수 있습니다. 아이디어를 얻는 데 도움이됩니다. 이 구현은 자동으로 데이터를 처리하고 쓰는 스트림을 사용합니다. 모든 것을 메모리에 저장하는 것보다 훨씬 확장 성이 뛰어납니다. 2.4.0부터. 버전, 몽구스는 스트림을 지원합니다. event-stream은 스트림의 데이터를 조작하기위한 훌륭한 라이브러리입니다.

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

그것은 작동합니다. 고맙습니다. – Suji