gpt4 book ai didi

javascript - mongodb nodejs 多重插入问题

转载 作者:可可西里 更新时间:2023-11-01 10:33:10 26 4
gpt4 key购买 nike

我正在尝试直接将表从 mysql 导入到 mongodb,而无需任何模式更改。

我为此编写了一个小的 Node 脚本,我的问题在于我实现它的方式。

也许我在循环中使用 mongo db insert limit 时遇到了一些限制。我想如果是反过来就不会出现这个问题了(也许不是!)

事情是这样的。mysql 表中的行超过 100,000,但当循环命中超过 30000 左右时,插入项的数量就会减少。

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

我强烈怀疑 Node 脚本/Node 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(); 调用关闭与 MongoDb 的连接之前,您没有等待 insert 操作完成。您需要跟踪未完成的异步请求,然后仅在它们全部完成时调用 db.close();

关于javascript - mongodb nodejs 多重插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com