我使用以下代码将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查询的结果?
答案 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,因为异步方面导致了未定义的错误。