QueryBuilder .leftJoin사용시 원하는 칼럼만 SELECT하기

개발/TypeORM 2022. 1. 17. 08:20

QueryBuilder를 사용하여 JOIN 쿼리가 포함된 쿼리문을 작성하다보면 주로 .leftJoinAndSelect 메소드를 사용한다. .leftJoinAndSelect를 사용하면 하나하나 칼럼을 체크할 필요가 없고, 코드 가시성적인 면에서는 장점이 있었지만, 모든 칼럼을 Select해오다보니 성능적인 면에서 필요한 칼럼만을 가져오는 쿼리에 비해 상대적으로 메모리 사용량이 많은 문제점 또한 존재한다. 작성하던 코드 중 JOIN을 3개의 테이블에 걸쳐 쿼리를 날려야되는 API가 있었는데 모든 칼럼을 SELECT해올 필요가 없어서 조금 코드 가시성은 떨어져도 .leftJoinAndSelect의 사용을 지양하고, .leftJoin과 .select, .addSelect를 사용하여 작성하였다. async fin..

Article Thumbnail
TypeORM GroupBy를 사용하여 정렬 Count하기

개발/TypeORM 2022. 1. 14. 02:47

모든 유저를 지역별로, 연령별로 정렬하여 유저 수를 통계를 내야되는 이슈가 있었다. 연령별로 묶어서 Count를하여 aged_user: [{age:'21', age_count:'10'}, {age: '22', age_count:'12'}]의 형식으로 프론트에 리턴해주는 것을 목표로 typeorm QueryBuilder를 사용하여 쿼리를 구성하였다. const userByAge = await this.repository .createQueryBuilder('user') // 유저 테이블을 지칭하는 이름을 'user'로 한다. .select('user.age') // 정렬할 유저 테이블의 칼럼만 select한다. .orderBy('user.age', 'DESC') // select한 칼럼을 내림차순으로 정렬..

Article Thumbnail
[TypeORM] SubScriber에서 camel Case 방식 칼럼값 업데이트 시 QueryFailedError: column does not exist 발생 시

개발/TypeORM 2021. 12. 19. 00:25

좋아요 API를 구현하고, 테스트 하던 중 아래와 같이 Column "likecount" does not exist 에러가 발생하였다. 그런데 해당 칼럼은 스토리 테이블에 존재하는 칼럼이다. 아래와 같이 TypeORM의 EntitySubscriberInterface를 implement해서 LikeSubScriber를 구현하였는데 afterInsert와 InsertEvent를 통해 Like 테이블에 새로운 row가 추가될 때마다 Story 테이블의 해당 스토리 likeCount 칼럼에 +=1을 하는 방식으로 해당 이슈를 참고하여 구현하였다. How can I incr/decr a value? · Issue #680 · typeorm/typeorm How can I increase a value by one..

Article Thumbnail