Обещание новичка ie здесь.
Я пытаюсь извлечь поле icon_name
из базы asset
, таблицу Equipment
в mongodb
и обновить поле icon_id
в equipments
база данных, equipments
таблица в mysql.
У меня около 12 000 записей с полем icon_name
в Equipment
.
Сценарий выполняется успешно, однако, похоже, что go через все записи. Когда я проверяю таблицу equipments
, обновляется только около 3000 записей.
Я пытался запустить сценарий несколько раз, и, похоже, каждый раз обновляется еще несколько записей.
Мое подозрение соединение с базой данных закрыто до того, как все запросы завершены, но поскольку я использую Promise.all
, я не знаю, почему это произошло.
Вот сценарий
const _ = require('lodash'),
debug = require('debug')('update'),
Promise = require('bluebird')
const asset = require('../models/asset'),
equipments = require('../models/equipments')
const Equipment = asset.getEquipment(),
my_equipments = equipments.get_equipments(),
icons = equipments.get_icons()
Promise.resolve()
.then(() => {
debug('Retrieve asset equipments, icons')
return Promise.all([
icons.findAll(),
Equipment.find({ icon_name: { $ne: null } })
])
})
.then(([my_icons, asset_equipments]) => {
debug('Update equipments')
const updates = []
console.log(asset_equipments.length)
asset_equipments.forEach((aeq, i) => {
const icon_id = my_icons.find(icon => icon.name === aeq.icon_name).id
up = my_equipments.update(
{ icon_id },
{ where: { code: aeq.eq_id } }
)
updates.push(up)
})
return Promise.all(updates)
})
.then(() => {
debug('Success: all done')
asset.close()
equipments.close()
})
.catch(err => {
debug('Error:', err)
asset.close()
equipments.close()
})
Заранее спасибо.