[Node.js 입문]

Prisma Clinet를 활용한 데이터베이스 상호작용

호지98 2024. 6. 4. 22:22

Prisma Client를 사용하면 데이터베이스와 상호작용하는 것이 매우 직관적이다. findUnique, findFirst, findMany와 같은 메서드를 사용하여 데이터를 조회할 수 있으며, where, include 등의 옵션을 사용하여 조건을 설정하고 관련 데이터를 포함시킬 수 있다.

데이터 조회 메서드

1. findUnique

특정 필드가 유일한 레코드를 조회한다. 주로 기본 키 또는 유니크 필드에 사용된다.

const user = await prisma.user.findUnique({
  where: {
    id: 1, // 유니크 필드
  },
});
console.log(user);

2. findFirst

조건에 맞는 첫 번째 레코드를 조회한다.

const user = await prisma.user.findFirst({
  where: {
    name: 'Alice', // 조건
  },
});
console.log(user);

 

3. findMany

조건에 맞는 여러 레코드를 조회한다. 결과는 배열로 반환된다.

const users = await prisma.user.findMany({
  where: {
    name: 'Alice', // 조건
  },
});
console.log(users);

 

조건 설정 (where)

where 옵션을 사용하여 다양한 조건을 설정할 수 있다.

 

// 단일 조건
const users = await prisma.user.findMany({
  where: {
    name: 'Alice',
  },
});

// 여러 조건
const users = await prisma.user.findMany({
  where: {
    AND: [
      { name: 'Alice' },
      { email: 'alice@example.com' },
    ],
  },
});

// OR 조건
const users = await prisma.user.findMany({
  where: {
    OR: [
      { name: 'Alice' },
      { name: 'Bob' },
    ],
  },
});

// NOT 조건
const users = await prisma.user.findMany({
  where: {
    NOT: {
      name: 'Alice',
    },
  },
});

// 관계된 필드의 조건
const posts = await prisma.post.findMany({
  where: {
    author: {
      is: {
        name: 'Alice',
      },
    },
  },
});

 

관련 데이터 포함 (include)

include 옵션을 사용하여 관련된 데이터를 포함시킬 수 있다.

const post = await prisma.post.findUnique({
  where: {
    id: 1,
  },
  include: {
    author: true, // author 데이터를 포함
    comments: true, // comments 데이터를 포함
  },
});
console.log(post);

 

종합 예제

 

// User 모델 정의 예시
// model User {
//   id    Int     @id @default(autoincrement())
//   name  String
//   posts Post[]
// }

// model Post {
//   id      Int     @id @default(autoincrement())
//   title   String
//   content String
//   userId  Int
//   user    User    @relation(fields: [userId], references: [id])
// }

// 1. 단일 사용자 조회 (유니크 필드로)
const user = await prisma.user.findUnique({
  where: {
    id: 1,
  },
  include: {
    posts: true, // 사용자가 작성한 모든 게시물 포함
  },
});
console.log(user);

// 2. 첫 번째 사용자 조회 (조건으로)
const firstUser = await prisma.user.findFirst({
  where: {
    name: 'Alice',
  },
  include: {
    posts: true,
  },
});
console.log(firstUser);

// 3. 여러 사용자 조회 (여러 조건으로)
const users = await prisma.user.findMany({
  where: {
    OR: [
      { name: 'Alice' },
      { name: 'Bob' },
    ],
  },
  include: {
    posts: true,
  },
});
console.log(users);

 

이 예제는 Prisma Client를 사용하여 다양한 조건으로 데이터를 조회하고, 관련된 데이터를 포함시키는 방법을 보여준다. 이러한 메서드와 옵션들을 활용하여 데이터베이스와 효율적으로 상호작용할 수 있다.