我目前正在编写一个节点脚本,以将简单的MongoDB表移动到MySQL。当前,数据已完全移动,但是我无法弄清楚如何正确终止连接,因此无法正确编写脚本。
我已尝试在脚本的许多部分中使用pool.close()
,它会抱怨在上载数据时池已关闭,或者仍然保持打开状态且不完整。
我还尝试过使用Promises在函数完成后关闭,但是我的背景既不是JavaScript也不是异步的,所以我很肯定我的实现不正确。
当前,我建立了mongodb连接:
function grabFromMongo(tableName) {
var mongoArray = {
rawMongoData: function() {
return MongoClient.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(function(db) {
var dbo = db.db("delta");
var collection = dbo.collection(tableName);
return {
collection: collection.find().toArray(),
db: db
};
}).then(function(items) {
return {
collection: items.collection,
db: items.db
};
});
}
};
return mongoArray;
}
然后在mongo调用中上传数据,本质上是:
function siteTable(pool) {
pool.query(`DROP TABLE IF EXISTS temp_site;`)
pool.query(`CREATE TABLE temp_site (
site_id INT UNIQUE, _id VARCHAR(50), id TEXT, site TEXT);`);
var siteIn = grabFromMongo("site");
siteIn.rawMongoData().then(function(items) {
items.collection.then(function(entry) {
for (var i = 0; i < entry.length; i++) {
pool.query(`INSERT INTO temp_site (site_id,
_id, id, site) VALUES (
'${i+1}', '${entry[i]._id}', '${entry[i].id}',
'${entry[i].site}');`);
}
});
}, function(err) {
console.error(err, err.stack);
})
}
我希望我需要在pool.end()
之外的某个地方打电话给siteTable
,但是我一生无法准确诊断放置它的位置,承诺或其他方式。