Shr*_*ant 2 csv mongoose mongodb
我正在尝试使用以下代码导出 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();
});
}Run Code Online (Sandbox Code Playgroud)
现在我直接调用此代码,但稍后我将从 Ajax 请求中调用它。
请建议最好和最快的方法。
这里是解决我的问题的代码
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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4710 次 |
| 最近记录: |