【问题标题】:Need to parse response from the database using sequelize需要使用 sequelize 解析来自数据库的响应
【发布时间】:2021-04-24 07:43:41
【问题描述】:

我正在使用 Node 和 sequelize 处理端点,其唯一职责是提供所提供的逗号分隔实体 ID 的标签。所以预期的反应是:

{
    "entity1_id": ["tag1", "tag2",],
    "entity2_id": ["tag3", "tag4"],
}

我没有遇到任何困难,但我意识到我在 for 循环中实例化实体,然后询问它们的标签,这对性能来说很糟糕。 因此,我决定不这样做,而是使用原始查询:

import { QueryTypes } from "sequelize"; 
await this.connection.query(
  `SELECT tr.external_id, ta.name from transactions tr 
      INNER JOIN  tag_taggable tt ON tt.taggable_id = tr.id AND tt.taggable_type = '${taggableType}' 
      INNER JOIN tags ta ON tt.tag_id = ta.id WHERE tr.external_id IN ('${ids.join("','")}'
);`, { type: QueryTypes.SELECT });

其中 ids 是 string[]external_id 是我正在使用的实体的标识符。

现在我得到这样的结果:

[
  { external_id: 'entity1_id', name: 'tag1' },
  { external_id: 'entity1_id', name: 'tag2' },
  { external_id: 'entity2_id', name: 'tag3' },
  { external_id: 'entity1_id', name: 'tag4' }
]

我正在徘徊我需要做些什么来获得我之前发送的回复。 SQL 方面的东西??,如果没有,在 JS 方面做这件事的最佳方法是什么? (reducer?for of?)。

【问题讨论】:

    标签: sql node.js sequelize.js


    【解决方案1】:

    对于 JS 方面,我提出了 for ofreduce

    const alreadyPushedIds: string[] = [];
    const finalResult: { [key: string]: string[] } = {};
    for (const result of results) {
        if (alreadyPushedIds.includes(result.external_id)) {
            finalResult[result.external_id].push(result.tag_name);
        } else {
        alreadyPushedIds.push(result.external_id);
        Object.assign(finalResult, { [result.external_id]: [result.tag_name] });
        }
    }
    
    results.reduce<{ [key: string]: string[] }>((
          acc: { [key: string]: string[] },
          val: { external_id: string; tag_name: string }
        ) => {
          if (!acc[val.external_id]) {
            acc[val.external_id] = [];
          }
          acc[val.external_id].push(val.tag_name);
          return acc;
        }, {})
    

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多