我想從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/] –