1

Node CSVパーサーを使用して、Mongoデータベースからクエリ結果を読み込み、csvファイルに書き出そうとしています。

スクリプトを実行すると、最初の行に2つの[object]エントリがあり、それ以外はすべて空白の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 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 } ]

データベースに入力したユーザーは1人だけなので、正しいと思います。

どんな助けでも大歓迎です!

編集:

コールバックで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);
})
}
});

2つの[オブジェクト]フィールドの代わりに、フィールドに奇妙な記号が含まれているため、ファイルを開くときにフィルターを選択するように求められます。

4

1 に答える 1

1

への呼び出しUser.find()は非同期です。検索結果を に割り当てていませんusers。への呼び出しをコールバックに移動し、そこcsvへの参照を に置き換えるか、コールバック パラメータの名前を に変更する必要があります。usersresultsusers

于 2012-07-19T04:21:40.700 に答える