mongodb nodejs多重插入问题

我试图直接从mysql导入到mongodb没有任何架构更改。

我写了一个小的节点脚本,我的问题是我实现它的方式。

也许我在循环中使用mongo db插入限制时遇到了一些限制。 我认为这个问题不会发生,如果它是相反的(也许不是!)

所以这是事情。 mysql表中的行超过了100,000,但是当循环命中超过30000时,插入的项目数量减less了。

所以我们假设在使用下面提到的脚本完成导入后,如果mysql表中有100,000个项目,我最多只能得到37000个左右。

我强烈的suscpicion要么在节点脚本/节点mongodb连接器,或在脚本中的一些错误或最后在mongodb并发数据库插入限制。

我正在粘贴下面的脚本。 希望我能绕过它。

谢谢,

var http = require('http'), mysql = require('mysql'), mongo = require('mongodb').MongoClient, format = require('util').format; var connection = mysql.createConnection({ user: "xxx", password: "xxx", database: "mydb" }); connection.connect(); var query = "select * from mytable"; var mysqlrows = ''; connection.query(query, function(err,rows,fields){ if(err) throw err; console.log(rows.length+'rows found.'); mongo.connect('mongodb://root:root@127.0.0.1:27017/mydb', function(err, db){ if (err) throw err; var collection = db.collection('mytable'); for(var i=0; i<rows.length;i++) { //console.log(JSON.stringify(rows[i])); (function(i){ collection.insert(rows[i],function(err,docs){}); console.log(i); })(i); } db.close(); }); }); connection.end(); 

问题在于,在通过db.close();closures与MongoDb的连接之前,您并没有等待insert操作完成db.close(); 呼叫。 您需要跟踪未完成的asynchronous请求,然后只调用db.close(); 当他们都完成了。

为了确保您从mySQL获取所有数据,请尝试访问最后一行。 如果你能得到它,使用mongodb的标志w和j来确保每个调用在移动到下一个之前插入数据。 与w和j标志,你应该考虑多个插入通过插入多个行在每次调用使用和数组。