如何将MongoDB查询的结果存储在带有Nodejs的文本文件中?

时间:2018-02-14 08:03:32

标签: node.js

我使用以下代码将mongoDB中的数据存储到txt文件中。 但是当我打开txt文件时。什么都没有保存。

var express = require('express'); 
var router = express.Router(); 
var fs = require('fs');
var mongodb = require('mongodb').MongoClient;
mongodb.connect('mongodb://127.0.0.1:27017/data', function(err, db) {
  if (err) throw err;
  var test = db.collection('test');
  for (var i = 0; i < 10; i++)
  {
    test.find({ "number": i }, {"email": 1, "_id": 0}).toArray(function (err,data) {
      if (err) throw err;
                fs.writeFile("/tmp/test", data, function(err) {
            if(err) {
                return console.log(err);
            }

            console.log("The file was saved!");
        });
      //console.log(data);
  });
  }
});

console.log(data);

的结果
[ { email: 'example@email.com' } ]
[ { email: 'test@email.com' } ]
[]
[ { email: 'email@email.com' } ]
.......

如何在文本文件中存储MongoDB查询的结果?

2 个答案:

答案 0 :(得分:0)

mongodb.connect('mongodb://127.0.0.1:27017/data', function (err, db) {
if (err) throw err;
var test = db.collection('test');
recursiveadd(0,10,"",function(err,data){
    if (err) {
        return console.log(err);
    }else{
        fs.writeFile("/tmp/test", data, function (err) {
        if (err) {
            return console.log(err);
        }

        console.log("The file was saved!");
      });
    }
 })


});

function recursiveadd(i,n,datatofile,cb){
    if(i>n){
      cb(undefined,"success");
      return;
   }
    test.find({
        "number": i
    }, {
        "email": 1,
        "_id": 0
    }).toArray(function (err, data) {
        if (err)cb(err);
           datatofile = datatofile + " " + JSON.stringify(data);
    });
    recursiveadd(i++,n,datatofile,cb);

}

答案 1 :(得分:0)

您未定义的原因是因为在数据加载完成之前调用了fs.WriteFile()。你需要使用promises并做这样的事情:

mongodb.connect('mongodb://127.0.0.1:27017/data', function (err, db) {
if (err) throw err;
var test = db.collection('test');
var datatofile;

function process(){
return new Promise((resolve,reject) => {
for (var i = 0; i < 10; i++) {
test.find({
    "number": i
}, {
    "email": 1,
    "_id": 0
}).toArray(function (err, data) {
    if (err) throw err;
       datatofile = datatofile + " " + JSON.stringify(data);
});
resolve(datatofile);
}

process()
.then(function(data){

fs.writeFile("/tmp/test", data, function (err) {
if (err) {
    return console.log(err);
    }

console.log("The file was saved!");

});

请注意,没有运行它可能不起作用,但是你需要使用promises,因为异步方面导致了未定义的错误。