求nodejs sequelize ORM mysql操作的精简的方案
有一个查库动作,三个库
一个 MpLabel 标签库,这个库是用户在新增标签的时候插入的
一个 MpLabelCard 卡片标签库
一个 MpLabelCardLog 日志库
三个库的流程是
step1.首先查询标签库中数据,如果没有该标签新建标签,并获得标签ID
step2.从名片标签库中查找所有名片的标签,如果没有符合条件的则新建
step3.如果labelCard有该数据,为标签合计数据数据自增量1
目前写的操作动作是
const name = ctx.request.body.labels; // 这里会进来5个标签
const uid = ctx.request.body.uid;
const cid = ctx.request.body.cid;
const cardsn = ctx.request.body.cardsn;
const time = Math.round(new Date().getTime() / 1000);
for (const i in name) {
// 添加标签 step1.首先查询标签库中数据,如果没有该标签新建标签,并获得标签ID
const res = yield this.ctx.model.MpLabel.findOrCreate({
where: {
name: name[i],
},
defaults: {
name: name[i],
card_sn: cardsn,
tm: time,
},
});
// 添加关系 step2.从名片标签库中查找所有名片的标签,如果没有符合条件的则新建
const labelCard = yield this.ctx.model.MpLabelCard.findOrCreate({
where: {
card_sn: cardsn,
lid: res[0].dataValues.id,
cid,
},
defaults: {
card_sn: cardsn,
lid: res[0].dataValues.id,
count: 0,
cid,
},
});
// step3.如果labelCard有该数据,为标签合计数据数据自增量1
if (labelCard[0].isNewRecord === false) {
yield this.ctx.model.MpLabelCard.increment({
count: 1,
}, {
where: {
card_sn: cardsn,
lid: res[0].dataValues.id,
},
});
// step4.如果没有该标签,新建标签数据
}
// 进行日志保存
yield this.ctx.model.MpLabelCardLog.create({
lid: res[0].dataValues.id,
card_sn: cardsn,
uid,
cid,
tm: time,
});
}
统计了一下,用户如果添加5个标签,耗时2s
是否可以精简或者有更优化的方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)