使用本机Node.js驱动程序将MongoDB结果写入文件

时间:2014-05-29 18:04:19

标签: javascript node.js mongodb

我正在尝试使用本机Node.js驱动程序将MongoDB查询的结果写入文件。我的代码如下(基于这篇文章:Writing files in Node.js):

var query = require('./queries.js');
var fs = require('fs');

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/test", function(err, db) {
    if(err) { return console.dir(err); }

    var buildsColl = db.collection('blah');

    collection.aggregate(query.test, function(err, result) {
        var JSONResult = JSON.stringify(result);
        //console.log(JSONResult);

        fs.writeFile("test.json", JSONResult, function(err) {
            if(err) {
                console.log(err);
            } else {
                console.log("The file was saved!");
            }
        });
    });

    collection.aggregate(query.next, function(err, result) {
        var JSONResult = JSON.stringify(result);
        //console.log(JSONResult);
        db.close();
    });

});

文件已写入,但内容未定义。'将结果打印到控制台可以正常工作。

2 个答案:

答案 0 :(得分:2)

您的代码未检查汇总回调中的err

您可能会收到Mongo错误,在这种情况下结果为undefined ...

我可以怀疑的另一件事是你得到了多个回调 - 每个回调都会创建一个新文件,删除内容。

尝试使用fs.appendFile代替fs.writeFile,看看您是否获得了预期数据(加上不需要的undefined

答案 1 :(得分:2)

对于任何绊倒这个问题的人来说,db.close()放在哪里的解决方案如下:

collection.aggregate(query.test, function(err, result) {
    var JSONResult = JSON.stringify(result);
    //console.log(JSONResult);

    fs.writeFile("test.json", JSONResult, function(err) {
        if(err) {
            console.log(err);
        } else {
            console.log("The file was saved!");
        }
    });

    collection.aggregate(query.next, function(err, result) {
        var JSONResult = JSON.stringify(result);
        //console.log(JSONResult);
        db.close();
    });
});