求nodejs sequelize ORM mysql操作的精简的方案

发布于 2022-09-06 02:52:57 字数 1866 浏览 9 评论 0

有一个查库动作,三个库

一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2022-09-13 02:52:57
const promiseArr = []
for(const i in name) {
    promiseArr.push(new Promise((resolve,reject) => {
        yield a;
        yield b;
        yield c;
        yield d;
        resolve(e);
    }))
}
Promise.all(promiseArr).then(resArr => {})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文