티스토리 뷰
반응형
목차
1. 원시 쿼리 (row query)로 조회하기
const user = await sequelize.query('select * from user where userId = 3');
이렇게 sequelize(sq) 의 query 함수를 이용하면 원시 쿼리문으로 조회가 가능합니다.
2. 원시 쿼리 조회 시 객체 중첩되지 않게 하기
const user = await sequelize.query(
'select * from user where userId = 3',
{
type: QueryTypes.SELECT
},
);
type: QueryTypes.SELECT 를 추가해준다면 아래처럼 배열로 중첩되어 조회되었던 내용이
{
"data": [
[
{
"userId": 3
}
],
[
{
"userId": 3
}
]
]
}
이렇게 중첩되지 않은 상태로 조회가 됩니다.
{
"data": [
{
"userId": 3
}
]
}
3. where 절 in 조회하기
in 조회는 두 가지 방법이 있습니다. 귀찮은 방법은 아래와 같은 방법있고,
User.findAll({
where: {
userId: { [Op.in]: [1,2,3] }
}
});
만약 조금 더 간단히 사용하고 싶다면 아래와 같이 배열을 집어넣어 사용해도 정상적으로 동작합니다.
User.findAll({
where: {
userId: [1,2,3]
}
});
4. hasMany 와 belongsTo
아래와 같이 userId를 fk로 가지고 있는 board 테이블이 있다고 가정하겠습니다.
User.init({
userId: Sequelize.STRING,
name: Sequelize.STRING
}, { sequelize, modelName: 'user' });
Board.init({
boardId: Sequelize.STRING,
userid: Sequelize.STRING,
title: Sequelize.STRING,
content: Sequelize.STRING
}, { sequelize, modelName: 'board' });
둘의 연관 관계를 설정하여 이후에 include 등을 사용할 때 문제없이 동작하도록 설정이 가능합니다.
이 때 constraints를 false 설정하면 순환 참조를 방지할 수 있습니다.
User.hasMany(DB.Board, { foreignKey: 'userId', constraints: false })
Board.belongsTo(DB.User, { foreignKey: 'userId', constraints: false })
5. include 로 join 하기
include 를 사용하여 다른 테이블을 join 할 수 있습니다. 이 때 아래와 같이 attributes 를 설정하면 원하는 컬럼만 조회하도록 설정이 가능합니다. 이는 주체가 되는 테이블에도 동일하게 적용이 가능합니다.
User.findAll({
attributes: ['userId'],
include: [
{ model: Board, attributes: ['content'] }
],
});
6. 조회 로직 기본 옵션 예제
아래와 같이 기본 옵션을 설정할 수 있습니다.
User.findAll({
attributes: ['userId'],
include: [
{ model: Board, attributes: ['content'] },
],
where: {
userId: 3,
},
order: [['userId', 'DESC']],
limit: 1,
})
group by 나 operators 를 이용하는 방법은 차차 알아보겠습니다.
더 쓰고 싶은데 시간이 부족하네요.
부족한 내용은 2탄으로 더 작성하겠습니다.
반응형
'개발 일지' 카테고리의 다른 글
[aws-cli] sns 관련 사용 중인 커맨드 정리 (0) | 2022.09.29 |
---|---|
javascript csv 파일 생성 및 다운로드 예제 (0) | 2022.07.12 |
javascript csv file 읽기 (0) | 2022.07.12 |
Sequelize upsert 사용하기 (unique index 지정) (0) | 2022.07.11 |
RDS 파라미터 그룹 이슈로 네이버 로그인 안됨 (0) | 2022.05.07 |