본문 바로가기
NestJS

TypeORM - where 유틸리티

by Programmer.Junny 2025. 2. 25.
return this.userRepository.find({
where: {
// 아닌 경우 가져오기
// id: Not(1),
// 적은 경우 가져오기
// id: LessThan(30),
// 같거나 적은경우 가져오기
// id: LessThanOrEqual(30),
// 많은 경우
// id: MoreThan(30),
// 많거나 같은 경우
// id: MoreThanOrEqual(30),
// 같은 경우
// id: Equal(30),
// 유사값 (% 앞뒤로 상관없이 가져옴)
// email: Like('%0%'),
// 대문자 소문자 구분 안하는 유사값
// email: ILike('%GOOGLE%'),
// 사이값
// id: Between(10, 15),
// 해당되는 여러개의 값
// id: In([1, 3, 5, 7, 9]),
// null인 경우 가져오기
// id: IsNull(),
},
});

find 의 where에서는 다양한 유틸리티 함수를 사용할 수 있다.

Not

특정 값과 같지 않음을 조건으로 설정한다.

// id가 1이 아닌 레코드를 조회합니다.
where: { id: Not(1) }

LessThan

특정 값보다 작은 값을 조건으로 지정한다.

// id가 30보다 작은 레코드
where: { id: LessThan(30) }

LessThanOrEqual

특정 값보다 작거나 같은 값을 조회할 때 사용한다.

// id가 30 이하인 레코드
where: { id: LessThanOrEqual(30) }

MoreThan

특정 값보다 큰 값을 조건으로 한다.

// id가 30보다 큰 레코드
where: { id: MoreThan(30) }

MoreThanOrEqual

특정 값보다 크거나 같은 값을 조회할 때 사용한다.

// id가 30 이상인 레코드
where: { id: MoreThanOrEqual(30) }

Equal

정확히 같은 값을 가진 레코드를 조회한다.

// id가 30인 레코드
where: { id: Equal(30) }

Like

문자열의 패턴 매칭을 위한 조건이다.
SQL의 LIKE 연산자와 동일하게 작동하며, % 와 같은 와일드카드를 사용한다. (% 앞뒤로 상관없이 가져옴)

// email에 '0'이 포함된 레코드 (패턴 매칭)
where: { email: Like('%0%') }

ILike

Like와 비슷하지만, 대소문자 구분 없이 패턴 매칭을 수행한다.
주로 PostgreSQL에서 사용된다.

// email에 'GOOGLE' (대소문자 구분 없이)이 포함된 레코드
where: { email: ILike('%GOOGLE%') }

Between

두 값 사이의 범위 내에 있는 값을 조회할 때 사용한다.

// id가 10과 15 사이인 레코드
where: { id: Between(10, 15) }

In

특정 값들의 집합 중 하나에 해당하는 경우를 조회한다.

// id가 1, 3, 5, 7, 9 중 하나인 레코드
where: { id: In([1, 3, 5, 7, 9]) }

IsNull

해당 컬럼의 값이 NULL인 경우를 조회한다.

// id가 null인 경우 (실제로는 주로 다른 컬럼에 사용)
where: { someColumn: IsNull() }

Any

주로 PostgreSQL 등에서 배열 컬럼에 대해, 배열 내의 값 중 하나와 일치하는지 확인할 때 사용한다.

import { Any } from 'typeorm';
// 예를 들어, tags라는 배열 컬럼이 있고, 'typescript'라는 값이 포함된 레코드를 찾을 때:
const posts = await postRepository.find({
where: { tags: Any(['typescript']) }
});

Raw

보다 복잡하거나 커스텀한 SQL 조건을 직접 작성할 필요가 있을 때 사용한다.
Raw를 사용하면 SQL의 특정 부분을 직접 넣어 조건을 정의할 수 있으므로, 표준 유틸리티 함수로 표현하기 어려운 로직을 구현할 수 있다.

import { Raw } from 'typeorm';
// 예를 들어, title 컬럼의 길이가 10보다 큰 경우를 찾고 싶다면:
const posts = await postRepository.find({
where: {
title: Raw(alias => `LENGTH(${alias}) > 10`)
}
});

'NestJS' 카테고리의 다른 글

Authentication - JWT  (0) 2025.02.26
TypeORM - Repository 메서드 종류  (0) 2025.02.25
TypeORM - FindManyOptions 파라미터  (0) 2025.02.24
TypeORM - 다대다 관계 구현  (0) 2025.02.24
TypeORM - 일대다, 다대일 관계 구현  (0) 2025.02.24

최근댓글

최근글

skin by © 2024 ttuttak