Mongoose流数据并将数据导出到CSV文件

时间:2017-11-06 14:52:50

标签: mongodb csv mongoose

我正在尝试使用以下代码导出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请求中调用它。

请建议最好和最快的方法。

1 个答案:

答案 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);