从类型ORM查询-节点中选择一列



我有一个返回五列的ORM类型查询。我只想返回company列,但我需要选择所有五列来生成正确的响应。

有没有一种方法可以将我的查询包装在另一个select语句中,或者转换结果以获得我想要的company列?

请参阅下面的代码:

这是查询当前返回的内容:https://i.stack.imgur.com/MghEJ.png

我希望它返回:https://i.stack.imgur.com/qkXJK.png


const qb = createQueryBuilder(Entity, 'stats_table');
qb.select('stats_table.company', 'company');
qb.addSelect('stats_table.title', 'title');
qb.addSelect('city_code');
qb.addSelect('country_code');
qb.addSelect('SUM(count)', 'sum');
qb.where('city_code IS NOT NULL OR country_code IS NOT NULL');
qb.addGroupBy('company');
qb.addGroupBy('stats_table.title');
qb.addGroupBy('country_code');
qb.addGroupBy('city_code');
qb.addOrderBy('sum', 'DESC');
qb.addOrderBy('company');
qb.addOrderBy('title');
qb.limit(3);
qb.cache(true);
return qb.getRawMany();
};```

[1]: https://i.stack.imgur.com/MghEJ.png
[2]: https://i.stack.imgur.com/qkXJK.png

TypeORM不符合我的标准,所以我对它没有经验,但只要它不会导致TypeORM出现问题,我就会看到一个简单的SQL解决方案和一个几乎同样简单的TypeScript解决方案。

SQL解决方案就是不选择不需要的列。SQL将允许您使用在WHERE、GROUP BY和/或ORDER BY子句中未选择的字段,不过很明显,您需要使用"SUM(count("而不是"SUM"作为顺序。我遇到过一些ORM对此并不满意。

TS的解决方案是映射qb.getRawMany((的返回,这样你就只有你感兴趣的字段

getRawMany((.map(companyRecord=>{return{company:companyRecord.company}}(;

这可能不完全正确,我之所以请了一天假,正是因为我生病了,我的大脑足够模糊,我犯了太多愚蠢的错误,但即使代码本身不起作用,这个概念也应该起作用。

EDIT:还要注意,map返回一个新数组,它不会修改现有数组,所以在赋值时,而不是在赋值之后,您应该使用它来代替getRawMany((。

最新更新