MongoDB时间转换

时间:2014-02-17 18:53:42

标签: node.js mongodb csv

我有一个MongoDB集合,我根据时间范围和地址编号查询。如果查询成功,则服务器将返回CSV文件,其中包含存储在每个查询条目中的多个属性。这部分工作正常。

问题是我的CSV文件中的一个属性是时间戳。我希望它返回本地日期时间(即“时间”:“2014-02-09T06:00:02.000Z”)...但是CSV文件以毫秒(即“时间”)返回日期对象“:1392040717774)。有没有一种简单的方法可以在将查询条目写入CSV文件之前转换为本地日期字符串?这是我的代码片段:

var JSONStream = require('JSONStream');

var httpserver = http.createServer(function(req, res) {
    var pathname = url.parse(req.url).pathname;

    if (pathname=="/DownloadUCData") {
        var requestData = '';
        req.on('data', function (data) {
            requestData += data;
        });

    req.on('end', function () {

        var json = JSON.parse(requestData);
        var st = new Date(json.startDate);
        var et = new Date(json.endDate);
        st.setHours(st.getHours()-4); //compensate for GMT offset
        et.setHours(et.getHours()-4);
        st=st.getTime();
        et=et.getTime();

        var proj=JSON.parse('{"state":1, "temperature":1, "mode":1, "speed":1, "time":1}');
        var cursor = userControlCollection.find({"addr": json.addr.toString(), "time": {$gte:st, $lte:et}}, proj);
        var dbstream = cursor.stream();
        var tempname = json.type+".csv";
        var wstream = fs.createWriteStream(tempname);
        wstream.on('error', function(e){console.error(e);});
        dbstream.on("end", function() {
            wstream.end();
            console.log("write end");
            res.writeHead(200, {"Content-Type": "application/json"});
            res.write(JSON.stringify({fname:tempname}));
            res.end();
            return;
        });

        var jsonToStrings = JSONStream.stringify(false);
        dbstream.pipe(jsonToStrings).pipe(wstream);
    });
}

1 个答案:

答案 0 :(得分:0)

所以,我想出了解决这个问题的一种方法(尽管可能还有其他方法)。基本上,我必须在管道系统中添加一个转换,将.getTime()数据转换为新的Date()对象。这是代码片段似乎解决了这个问题:

var Transform = require('stream').Transform;

var parser = new Transform({objectMode: true});
parser._transform = function(data, encoding, done) {
    if(data.time) data.time = new Date(data.time);
    this.push(data);
    done();
};

var jsonToStrings = JSONStream.stringify(false);

dbstream.pipe(parser).pipe(jsonToStrings).pipe(wstream);