【问题标题】:NodeJS mongoose - copy entire collection to database in another serverNodeJS mongoose - 将整个集合复制到另一台服务器中的数据库
【发布时间】:2019-03-21 00:48:59
【问题描述】:

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

我有 410k~ 个文档的集合,我想将它们部分 100 x 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 个连接来使服务器过载

【问题讨论】:

    标签: javascript node.js database mongoose


    【解决方案1】:

    我不会使用 nodejs 来完成这项任务。 Mongodb 带有用于备份和恢复的实用程序,它几乎肯定会比您做得更好、更有效,特别是如果您要添加 mongoose 开销。

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

    【讨论】:

    • NodeJS 是我唯一可行的方法
    • @KrystianK 怎么会这样?如果您可以从 Node 访问 MongoDB 服务器,您将可以通过备份和恢复工具访问它。
    • 感谢这个选项,但它仍然是关于 nodejs 的方式
    • @KrystianK 也许如果你解释为什么会这样,它可能有助于提供最佳答案。
    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多