我正在尝试使用以下代码导出CSV文件,但它无效。我假设我的数据量很大,因此可以选择Mongoose游标。我还注意到我提到500的'batchSize'仍然一次吐出1。
module.exports.export2CSV = (req, res)=>{
var limit = 250000;
var filename = 'export.csv';
var query = User.find();
if (limit){query.limit(limit);}
var headers = {
'Content-Type': 'text/csv',
'Content-disposition': 'attachment;filename=' + filename
}
// res.writeHead(200, headers)
res.setHeader('Content-disposition', 'attachment; filename='+filename);
res.set('Content-Type', 'text/csv');
var stream = User.aggregate().cursor({ batchSize: 500 }).exec().stream();
stream.on('data', function (doc) {
// do whatever you want with the data
res.write(doc);
}).on('error', function (err) {
// handle errors
res.end();
}).on('end', function () {
// close files
res.end();
});
}
现在我正在直接调用此代码,但稍后我将从Ajax请求中调用它。
请建议最好和最快的方法。
答案 0 :(得分:0)
这里解决了我的问题的代码
var User = mongoose.model('Users', UserSchema);
const cursor = User.find();
const transformer = (doc)=> {
return {
Id: doc._id,
Name: doc.fullname,
Email: doc.email,
Type: doc.registration_type,
RegisterOn: doc.registered_on
};
}
const filename = 'export.csv';
res.setHeader('Content-disposition', `attachment; filename=${filename}`);
res.writeHead(200, { 'Content-Type': 'text/csv' });
res.flushHeaders();
var csvStream = fastCsv.createWriteStream({headers: true}).transform(transformer)
cursor.stream().pipe(csvStream).pipe(res);