2015-06-08 18 views
0

我尝试使用async.queue从CSV流中插入MongoDB文档。 但我面临这个以下错误。我已经尝试了类似SO帖子中提供的所有补救措施。使用async.queue从CSV流插入MongoDB文档时出现“对象不是函数”错误

确切的错误信息是:

C:\Users\admin\node_modules\mongodb\lib\mongo_client.js:406 throw err TypeError:object is not a function at C:\Users\admin\Desktop\mynodefile.js:13:2 at C:\Users\admin\node_modules\mongodb\lib\mongo_client.js:403:11 at process._tickCallback(node.js:355:11)

Node.js的代码我使用:

var csv = require('csv'); 
var async = require('async'); 
var fs = require('fs'); 
var MongoClient = require('mongodb').MongoClient; 

MongoClient.connect('mongodb://localhost:27017', function(err, db) { 
if (err) throw err; 

var collection = db.collection('myCSVs'); 
var queue = async.queue(collection.insert.bind(collection), 5); 

csv() 
.from.path('./input.csv', { columns: true }) 
.transform(function (data, index, cb) { 
    queue.push(data, function (err, res) { 
     if (err) return cb(err); 
     cb(null, res[0]); 
    }); 
}) 
.on('error', function (err) { 
    console.log('ERROR: ' + err.message); 
}) 
.on('end', function() { 
    queue.drain = function() { 
     collection.count(function(err, count) { 
      console.log('Number of documents:', count); 
      db.close(); 
     }); 
    }; 
}); 
}); 
+0

实施似乎“ csv()。from'cause the error,remove the'()'from csv .. – Surely

+0

@ xwhyLikeThis.Thanks。 C:\ Users \ admin \ Desktop \ mynodefile.js:14:7 的属性'path'未定义为 ,因此我尝试删除'()'。 admin \ node_modules \ mongodb \ lib \ mongo_client.js:403:11 at process._tickCallback(node.js:355:11) – nalin

+0

13:2是您程序中的哪一行? – Subburaj

回答

0

你有没有在你的MongoClient.connect函数调用中提到的数据库名称。你可以这样做是这样的:

MongoClient.connect('mongodb://localhost:27017/database_name',function(err, db) { 

然后,你可以这样做:

var collection = db.collection('myCSVs'); 

如果myCSVs是数据库名称

内集合或者你也可以这样做:

MongoClient.connect('mongodb://localhost:27017',function(err, mongoclient) { 
    var db = mongoclient.db('database_name'); 
    var collection = db.collection('myCSVs'); 
}); 
+0

谢谢你的努力。提出你的答案,但添加数据库名称没有任何好处。错误仍然存​​在! – nalin

+0

是'myCSVs'里面的一个集合的名称?什么是数据库名称? – KaushikTD

+0

db名称是“db”,是“myCSVs”是其中的集合 – nalin

0

你必须改变

var queue = async.queue(collection.insert.bind(collection), 5); 

分为:

var q = async.queue(function (task, callback) { 
    console.log('hello ' + task.name); 
    callback(); 
}, 2); 

在这一行:

queue.push(data, function (err, res) { 
     if (err) return cb(err); 
     cb(null, res[0]); 
    }); 

你用数据和回调调用推送,但它不是在你的

var queue = async.queue(collection.insert.bind(collection), 5); 
+0

谢谢。试过你的答案。再一次给我最大的不幸,错误没有解决! – nalin

相关问题