您当前的位置:踩坑首页 > js > node > 返回首页

nodejs中mongodb怎么导出计算后的数据csv

浏览次数:

时间:2018-09-27
2018年9月27,项目二开,中间有一个导出数据的功能,刚开始以为很简单,导出一个表就行了,但是项目交付时,才知道客户想显示的是每个用户计算的盈利统计结果,根本不是用户的某个表,后台用的是hapi框架。

解决办法:利用node底层文件写入流,fs.createWriteStream把要导出的数据先一行一行的写入文件中(其中写入的有计算后的结果,排版根据项目需要),然后导出文件。

const fs = require('fs');
exports.getUserCsv = async (request,reply)=>{
    let time = Date.now();
    let ws =fs.createWriteStream(`upload/csv/${time}.csv`);
    let userData = await dao.find(request,'user',{'type':2});
    ws.write("用户名,电话,真实姓名,是否冻结,全部乐钻,白乐钻,红乐钻,白冻结乐钻,红冻结乐钻,团队业绩,会员类型"+'\r\n');
    for(let i=0;i<userData.length;i++){
        ws.write(
            userData[i].username+','+
            userData[i].mobile+','+
            userData[i].realName+','+
            userData[i].state+','+
            userData[i].gold+','+
            userData[i].whiteEffectiveGold+','+
            userData[i].effectiveGold+','+
            userData[i].whiteFreezeGold+','+
            userData[i].freezeGold+','+
            userData[i].integralSum+','+
            '代理商'+'\r\n'
        )
        let nextUserData = await dao.find(request,"user",
            {'tuijian':userData[i].myNumber,'type':1},
            {},
            {'createTime':-1},
            parseInt(request.params.size),
            parseInt(request.params.page)
        )
        for(let o = 0;o<nextUserData.length; o++){
            
            let source=await dao.find(request,'yingliInfo',{'userId':nextUserData[o]._id+'','type':9})
            let val = 0
            for(let j=0;j<source.length;j++){
                val+=parseFloat(source[j].gold);
            }
            ws.write(
                nextUserData[o].username+','+
                nextUserData[o].mobile+','+
                nextUserData[o].realName+','+
                nextUserData[o].state+','+
                nextUserData[o].gold+','+
                nextUserData[o].whiteEffectiveGold+','+
                nextUserData[o].effectiveGold+','+
                nextUserData[o].whiteFreezeGold+','+
                nextUserData[o].freezeGold+','+
                val+','+
                '普通会员'+'\r\n'
            )
        }
        ws.end();
    }
    reply.file(`upload/csv/${time}.csv`)
}
注意事项:
\r回车 \n换行
window中用 \r\n 
Linux中用 \n 
Mac中用 \

上一篇:node.js----events 模块讲解

下一篇:pm2常用命令