我正在尝试使用Node CSV Parser从Mongo数据库中读取查询结果并将其写入csv文件。
当我运行我的脚本时,我得到一个csv文件,第一行有两个[object]条目,其他所有内容都是空白的。
这是我的代码:
// node samples/sample.js
var csv = require('csv');
var mongoose = require('mongoose');
var User = require('../models/userModel').User;
dsn = "mongodb://localhost/test";
mongoose.connect(dsn);
console.log ("here");
var users = User.find({}, function(err, result){
console.log(result);
});
var columns = ['userName','agencyName','email','password','id'];
csv()
.from(users, {
columns: true
})
.toPath(__dirname+'/users.csv',{
columns: ['userName','agencyName','email','password','id']
})
.transform(function(data){
data.unshift(data.pop());
return data;
})
.on('data',function(data,index){
console.log('#'+index+' '+JSON.stringify(data));
})
.on('end',function(count){
console.log('Number of lines: '+count);
})
.on('error',function(error){
console.log(error.message);
});
这是终端显示的数据:
[ { userName: 'LasVegas',
agencyName: 'City of Las Vegas',
email: 'lasvegas@gmail.com',
password: 'upload1',
_id: 4ffe2e6bddc0c02b15000001 } ]
我只输入了一个用户进入数据库,所以我认为它是正确的。
非常感谢任何帮助!
编辑:
尝试在回调中调用csv后,这是我的代码:
// node samples/sample.js
var csv = require('csv');
var mongoose = require('mongoose');
var User = require('../models/userModel').User;
dsn = "mongodb://localhost/test";
mongoose.connect(dsn);
console.log ("here");
var columns = ['userName','agencyName','email','password','id'];
var users = User.find({}, function(err, result){
console.log(result);
if (err){
callback(err,null);
}else{
csv()
.from(users, {
columns: true
})
.toPath(__dirname+'/users.csv',{
columns: ['userName','agencyName','email','password','id']
})
.transform(function(data){
data.unshift(data.pop());
return data;
})
.on('data',function(data,index){
console.log('#'+index+' '+JSON.stringify(data));
})
.on('end',function(count){
console.log('Number of lines: '+count);
})
.on('error',function(error){
console.log(error.message);
})
}
});
现在,而不是两个[object]字段,字段包含奇怪的符号,我被要求在打开文件时选择过滤器。
答案 0 :(得分:1)
您对User.find()
的呼叫是异步的;它没有将搜索结果分配给users
。您需要将来电csv
移至回调中,并将users
的引用替换为results
,或将回调参数重命名为users
。