@Sahnen

Как инициализировать Mongodb данными?

Задаю начальные данные для БД след. образом:

const ModTpl = require('../models/mod_tpl');
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb', { useMongoClient: true });

//Здесь набор самих данных
const data = [ ... ];

let done = 0;

for (let i = 0; i < data.length; i++) {
  data[i].save(function(err, result) {
//    if (err) {
//      console.log(i, err);
//      mongoose.disconnect();
//      return;
//    }

    done++;
    if (done === data.length) {
      exit();
    }
  });
}

function exit() {
  mongoose.disconnect();
}


В массиве около 50000 элементов, данные однородные. Запускается инициализация из терминала командой node initdata.js

В результате в базу добавляется все время разное количество элементов - от 18000 до 25000. Ошибок никаких не выводится.

Как гарантированно добавить все элементы в базу?
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
yellow79
@yellow79
Senior Software Engineer
Я бы заюзал либу async примерно как-то так:
const async = reuire('async');

let queue = async.queue(function(task, callback) {
    task.save(callback);
}, 10);

queue.drain = function() {
    exit();
};

for (let i = 0; i < data.length; i++) {
	queue.push(data[i]);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы