@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. Ошибок никаких не выводится.

Как гарантированно добавить все элементы в базу?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 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]);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarkov
@yarkov
Vue.js Frontend Developer
Либо как Andrey Tsvetkov предложил, либо заюзать async/await. Они уже вполне рабочие.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Leningrad Media Санкт-Петербург
от 120 000 руб.
CloudAware Пермь
от 1 000 до 2 500 usd.
Boomstarter Москва
от 110 000 до 160 000 руб.
21 авг. 2018, в 20:22
530 руб./в час
21 авг. 2018, в 19:08
500 руб./за проект
21 авг. 2018, в 18:45
50000 руб./в месяц