Sequelize raw query

broccoli·2021년 6월 30일
0

sequelize

목록 보기
6/7
post-thumbnail

Sequelize는 비교적 단순한 select절을 조회한다고 할때는 매우 간편하다.

하지만 subquery를 from절에서 만들어서 하거나, 특정한 조건이 필요하는 등 데이터 조회가 조금 복잡해지면 sequelize를 사용하는 것이 훨씬 더 힘들어지는 것 같다. 일단 해당 문구를 위한 sequelize문법이나 api를 찾아봐야하는 것도 그렇지만, 찾아봤는데 지원을 안하는 경우도 있다...

그래서 기본 raw 쿼리를 짜서 할 때가 더 편할때가 있다. 다만 이경우 조회해온 결과를 바인딩하기 적합하게 조작을 가해야하는 작업이 생긴다.

sequelize는 left join문을 통해 실제쿼리상에 여러줄을 한개의 줄로 변경해주는데...이런 라이브러리가 있나 검색을 해봐도 찾지 못했음...있으면 참 편할텐데.. 이점이 sequelize사용하는데 내가 제일 좋아하는 부분이긴 하다.

raw query 사용방법

MySQL에서 raw 쿼리를 쓸때는 {type: sequelize.OueryTypes.SELECT} 옵션을 사용해야한다. 안그러면 동일 결과가 두번씩 조회됨을 볼 수 있다.

// 쿼리예제는 단순한 쿼리를 듬.
import { sequelize } = require('../models')

router.get('/test', async (req, res, next) => {
  try {
    const query = `
      select p.id, p.userId, u.nickname 
      from posts p
      inner join users u p.userId = u.id
    `
    const result = await sequerlize.query(query, {
      type: sequelize.OueryTypes.SELECT
    }
  } catch (err) {
    console.error(err)
    next(err)
  }
}

그밖에 여러 옵션이 또 있는데 아래와 같다.

옵션***설명
nesttrue시에 만약 알리아스가 dot이 포함되어 있다면 dot이 있을 때마다 nest된다. (디폴트 false: nest안됨) 단 nest true를 하면서 model mapping옵션을 주면 동작안함.

이밖에 model, mapToModel, replacements, bind 옵션이 있음. 관련문서링크참조

참조링크

profile
🌃브로콜리한 개발자🌟

1개의 댓글

comment-user-thumbnail
2022년 10월 4일

OueryTypes -> QueryTypes로 오타 수정해주셔야 할 것 같습니다~

답글 달기