1. in - where에 조건을 배열로 걸기 (배열의 항목 중 하나라도 일치하는 모든 데이터 가져오기)
const users = await prisma.user.findMany({
where: {
id: {
in: [1, 2, 3],
},
},
});
where에 걸고싶은 조건이 여러개일때 배열로 묶어서 In으로 전달한다.
userId: 1, userId: 2, userId: 3
이렇게 세명의 user를 찾고싶을때
findFrist를 세번 사용해 한명씩 불러오기는 매우 비효율적이다.
findMany로 모든 유저를 다 불러온 다음 그 중에서 원하는 userId만 선택하기엔
데이터가 얼마 없을땐 괜찮을지 몰라도 데이터가 다량으로 쌓였을땐 속도저하의 원인이 될 수 있다.
이런 상황에서
findMany에 in 옵션을 사용해 손 쉽게 원하는 데이터들을 얻을 수 있다.
in 옵션을 몰랐을때는 찾고싶은 데이터가 여러개일때 findFirst를 map으로 돌려야하나.... for문으로 돌려야하나... 했었는데
in 옵션을 알고난 뒤 코드의 효율이 올라갔다. 근데 주변에 물어보니 나만 모르고있었다. 참나. 나는 아직 감자가 맞다.
쿼리 공부를 더 열심히 해서 이젠 내가 1등으로 알고있어야지...
// 지정된 날짜보다 이전에 올라온 게시글들 찾기
const boardCreated(date: Date) {
return this.prisma.board.findMany({
where: {
createAt: {
lte: date,
}
}
}),
};
// 찾은 게시글 정보들에서 userId만 추출 (배열)
const userIds = boardCreated.map((item) => item.userId);
// 추출한 usreId들과 일치하는 user 찾기
const usersInfo(userIds: number[]) {
return this.prisma.user.findMany({
where: {
id: {
in: userIds
}
}
}),
};
더 좋은 예시가 있겠지만 대략적으로 이런 상황에서 사용할 수 있다.
2. notIn - 제외할 조건을 배열로 걸기 (배열의 항목 중 하나라도 일치하는 모든 데이터 제외 후 가져오기)
const getUser = await prisma.user.findMany({
where: {
name: { notIn: ['Saqui', 'Clementine', 'Bob'] },
},
});
'Saqui'과 'Clementine', 그리고 'Bob' 이라는 이름을 가진 사용자들을 제외한 나머지 데이터만 불러온다.
3. Not - 제외할 조건
const users = await prisma.user.findMany({
where: {
NOT: {
age: {
lt: 18,
},
},
},
});
18세 미만이 아닌 유저의 레코드를 가져온다.
4. Not, in - 제외할 조건을 배열로 걸기 (배열의 항목 중 하나라도 일치하는 모든 데이터 제외 후 가져오기)
const getUser = await prisma.user.findMany({
where: {
NOT: {
name: { in: ['Saqui', 'Clementine', 'Bob'] },
},
},
});
Not 과 in 이 동시에 사용된 모습으로, 위에서 설명한 notIn 과 결과는 동일하다.
'개발 > PrismaORM' 카테고리의 다른 글
Prisma에서 페이지네이션 구현 (0) | 2023.12.26 |
---|---|
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (3) (0) | 2023.08.02 |
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (2) (0) | 2023.08.01 |
언젠가 사용하게 될 Prisma ORM 옵션 종류 및 설명 (1) (0) | 2023.07.31 |
Prisma Transaction이란?, $transaction 사용 방법 (0) | 2023.06.01 |