我正在尝试将数据库移至另一台服务器。
我收集了410k〜个文档,我想将它们部分100个100个地移到我的带有mongodb数据库的新服务器上。
有我的代码:
var mongoose = require('mongoose');
var itemdataModel = require('./model/ItemData');
mongoose.connection.on('error', function(err) {
console.log('MongoDB Connection Error.' + err);
process.exit(1);
});
mongoose.connection.on('close', function() {
console.log('Connection closed');
process.exit(1);
});
const ins = async (itemz) => {
try {
console.log("Inserting..")
await mongoose.connect('<url to new database>', { useNewUrlParser: true });
await gamedataModel.insertMany(itemz,
async (err, result) => {
if (err) {
console.log("Insert query error" + err)
await mongoose.connection.close()
} else {
console.log("Inserted!");
await mongoose.connection.close()
}
});
} catch (e) {
console.log('insert error ' + e)
}
}
(async () => {
mongoose.connect('<url to old database>', { useNewUrlParser: true });
const wyn = await itemdataModel.find({}).countDocuments()
console.log('Documents count: ' + wyn)
for (let i = 0; i < wyn; i += 100) {
const docs = await itemdataModel.find({status: 'processed'}, '', {'skip': i, 'limit': 100 }).lean().exec()
console.log('Selected ' + docs.length + ' documents to move')
await mongoose.connection.close()
await ins(docs)
}
})();
在“ ins”功能中连接到第二个数据库有问题,控制台输出为:
文件数:411975
选择了100个要移动的文档
连接已关闭
如何使其正常工作? 需要先关闭第一个连接,然后再开始插入100个文档,然后再关闭并返回我的循环以移动另外100个文档?
我不想通过一次打开两个服务器上的411k / 100个连接来使服务器超载
答案 0 :(得分:0)
我不会将nodejs用于此任务。 Mongodb附带了用于备份和还原的实用程序,几乎可以肯定,它将比您做得更好,更有效,特别是如果您要增加猫鼬的开销。
https://docs.mongodb.com/manual/tutorial/backup-and-restore-tools/