我有一個包含超過 500 萬條記錄的集合。我需要查詢資料并將其作為 csv 檔案傳遞??給客戶端。最初,當記錄過去很少時,我們只是回圈并將其寫入檔案并發送給客戶端。但是現在隨著記錄的不斷增長,它會消耗記憶體,我們正面臨著問題。所以為了使用我在下面嘗試的流,
const cursor = Model.find(query)
const transformer = (doc) => {
return {
"Creator": doc.Entity_Creator,
"Action Date" : doc.E_Approve_Time,
"Remarks": doc.Entity_Comment
}
}
let pat = path.join(__dirname, '../')
var csvFilePath = '././downloads/' ' Approved.csv'
const filename = pat csvFilePath
res.setHeader('Content-disposition',`attachment;filename=${filename}`);
res.writeHead(200,{ 'Content-Type': 'text/csv'})
res.flushHeaders();
var csvStream = fastCsv.format({headers: true}).transform(transformer)
cursor.stream().pipe(csvStream).pipe(res)
但下載后,我在單列中獲取帶有 Object Object 的檔案。如何解決這個問題?

uj5u.com熱心網友回復:
用這個
const transformer = (doc) => {
return {
Creator: doc.Entity_Creator,
"Action Date": doc.E_Approve_Time,
Remarks: doc.Entity_Comment,
};
};
let pat = path.join(__dirname, "../");
var csvFilePath = "././downloads/" " Approved.csv";
const filename = pat csvFilePath;
res.setHeader("Content-disposition", `attachment;filename=${filename}`);
res.writeHead(200, { "Content-Type": "text/csv" });
res.flushHeaders();
var csvStream = fastCsv.format({ headers: true }).transform(transformer);
csvStream.pipe(process.stdout).on("end", () => process.exit());
Model.find(query).exec(function (err, cursor) {
if (err) {
console.log(err);
console.log('error returned');
return false;
}
if (!data) {
console.log('Authentication Failed');
return false;
}
cursor.forEach((e) => {
csvStream.write({
Creator: e.Entity_Creator,
"Action Date": e.E_Approve_Time,
Remarks: e.Entity_Comment,
});
});
})
csvStream.end();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473948.html
上一篇:用于嵌套req.body資料的ExpressJsTrim中間件
下一篇:將值推送到作為物件值的陣列
