【发布时间】: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