我想从mysql导入一个表到mongodb直接没有任何架构更改。mongodb nodejs多个插入问题
我写了一个小节点脚本,我的问题是我实现它的方式。
也许我在循环中使用mongo db插入限制时遇到了一些限制。 我认为这个问题不会发生,如果它是反向的(可能不是!)
所以这里的东西。 mysql表中的行超过100,000,但是当循环命中超过30000时,插入的项目数量会减少。
所以我们假设在使用下面提到的脚本完成导入后,如果mysql表中有100,000个项目,那么我最多只能得到37000左右。
我强烈的怀疑是在节点脚本/节点mongodb连接器,或者脚本中的一些错误或最后在mongodb并发db插入限制。
我粘贴下面的脚本。 希望我能解决它。
感谢,
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:[email protected]: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();
'insert'可以接受一系列文档;你是否尝试过直接将'rows'传递给'insert'而不是一个一个的? – JohnnyHK
感谢您的提示,我试图删除循环,然后尝试插入整个“行”数组本身。它的确如你所说的那样工作,但在这里又出现了一个问题。如果“rows”数组的计数小于1150,它可以完美地工作,但是如果根据我的测试,行数大于1200左右,它会再次失败。在将大量行同时插入到mongdb的方法中有些问题非常严重。这里我再次怀疑某种mongodb多重插入限制。但是这在mongo db limits文档中没有提及。 [http://docs.mongodb.org/manual/reference/limits/] –