본문으로 건너뛰기

정렬

orderBy를 사용하여 특정 필드 또는 필드 집합을 기준으로 레코드 목록 또는 중첩 레코드 목록을 정렬합니다.

예를 들어 다음 질의는 rolename으로 정렬된 모든 User 레코드와, title로 정렬된 각 사용자의 게시물을 반환합니다.

ts
const usersWithPosts = await prisma.user.findMany({
orderBy: [
{
role: 'desc',
},
{
name: 'desc',
},
],
include: {
posts: {
orderBy: {
title: 'desc',
},
select: {
title: true,
},
},
},
})
ts
const usersWithPosts = await prisma.user.findMany({
orderBy: [
{
role: 'desc',
},
{
name: 'desc',
},
],
include: {
posts: {
orderBy: {
title: 'desc',
},
select: {
title: true,
},
},
},
})
결과
ts
[
{
"email": "kwame@prisma.io",
"id": 2,
"name": "Kwame",
"role": "USER",
"posts": [
{
"title": "Prisma in five minutes"
},
{
"title": "Happy Table Friends: Relations in Prisma"
}
]
},
{
"email": "emily@prisma.io",
"id": 5,
"name": "Emily",
"role": "USER",
"posts": [
{
"title": "Prisma Day 2020"
},
{
"title": "My first day at Prisma"
},
{
"title": "All about databases"
}
]
}
]
결과
ts
[
{
"email": "kwame@prisma.io",
"id": 2,
"name": "Kwame",
"role": "USER",
"posts": [
{
"title": "Prisma in five minutes"
},
{
"title": "Happy Table Friends: Relations in Prisma"
}
]
},
{
"email": "emily@prisma.io",
"id": 5,
"name": "Emily",
"role": "USER",
"posts": [
{
"title": "Prisma Day 2020"
},
{
"title": "My first day at Prisma"
},
{
"title": "All about databases"
}
]
}
]
참고

중첩된 레코드 목록을 정렬하여 ID별로 단일 레코드를 검색할 수도 있습니다.

관계로 정렬하기

관계의 프로퍼티를 기준으로 정렬할 수 있습니다.

예를 들어 다음 질의는 작성자의 이메일 주소를 기준으로 모든 게시물을 정렬합니다.

ts
const posts = await prisma.post.findMany({
orderBy: {
author: {
email: 'asc',
},
},
})
ts
const posts = await prisma.post.findMany({
orderBy: {
author: {
email: 'asc',
},
},
})

관계 그룹 값으로 정렬하기

2.19.0 이상에서는 관련 레코드 개수를 기준으로 정렬할 수 있습니다.

예를 들어 다음 질의는 관련 게시물 수를 기준으로 사용자를 정렬합니다.

ts
const getActiveUsers = await prisma.user.findMany({
take: 10,
orderBy: {
posts: {
_count: 'desc',
},
},
})
ts
const getActiveUsers = await prisma.user.findMany({
take: 10,
orderBy: {
posts: {
_count: 'desc',
},
},
})
참고

현재 관계 개수를 반환하는 것은 불가능합니다.

null 레코드를 처음이나 마지막으로 정렬하기

4.1.0 이상에서는 null 필드가 있는 레코드가 처음이나 마지막에 나타나도록 결과를 정렬할 수 있습니다.

이 기능을 사용하려면 schema.prisma 파일의 generator 블록에서 orderByNulls 미리 보기 기능을 활성화합니다.

prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["orderByNulls"]
}
prisma
generator client {
provider = "prisma-client-js"
previewFeatures = ["orderByNulls"]
}
참고

선택적인 스칼라 필드에서만 null로 정렬할 수 있습니다. 필수 필드 또는 관계 필드에서 null을 기준으로 정렬하려고 하면 프리즈마 클라이언트에서 P2009 오류가 발생합니다.

updatedAt가 선택적 필드라고 가정하면, 다음 질의는 updatedAt로 게시물을 정렬하며 null 레코드는 마지막에 위치합니다.

ts
const posts = await prisma.post.findMany({
orderBy: {
updatedAt: { sort: 'asc', nulls: 'last' },
},
})
ts
const posts = await prisma.post.findMany({
orderBy: {
updatedAt: { sort: 'asc', nulls: 'last' },
},
})