NodeJS猫鼬-将整个集合复制到另一台服务器的数据库中

时间:2018-10-16 13:12:21

标签: javascript node.js database mongoose

我正在尝试将数据库移至另一台服务器。

我收集了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个连接来使服务器超载

1 个答案:

答案 0 :(得分:0)

我不会将nodejs用于此任务。 Mongodb附带了用于备份和还原的实用程序,几乎可以肯定,它将比您做得更好,更有效,特别是如果您要增加猫鼬的开销。

https://docs.mongodb.com/manual/tutorial/backup-and-restore-tools/