【发布时间】:2020-01-14 17:34:57
【问题描述】:
在这里保证新手。
我正在尝试从 asset 数据库中检索 icon_name 字段,Equipment mongodb 中的表
并更新equipments数据库中的icon_id字段,mysql中的equipments表。
我有大约 12,000 条记录,icon_name 字段位于 Equipment。
脚本成功运行,但似乎并未遍历所有记录。
当我检查equipments 表时,只更新了大约 3,000 条记录。
我尝试多次运行该脚本,每次似乎都会更新更多记录。
我怀疑数据库连接在所有查询完成之前就关闭了,但由于我使用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()
})
提前致谢。
【问题讨论】:
标签: mysql node.js mongodb promise sequelize.js