NodeJS mongoose - скопировать всю коллекцию в базу данных на другом сервере - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь переместить свою базу данных на другой сервер.

У меня есть коллекция с документами 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 голосов
/ 16 октября 2018

Я бы не использовал nodejs для этой задачи.Mongodb поставляется с утилитами для резервного копирования и восстановления, которые почти наверняка сделают это лучше и эффективнее, чем вы, особенно если вы добавляете накладные расходы на mongoose.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...