일괄 등록 (bulkCreate)
const result = await User.bulkCreate(usersDTO)
일괄 등록의 경우 Sequelize는 bulkCreate 메서드를 지원하고 있습니다. bulkCreate()를 이용해서 배열을 한 번에 insert 칠 수 있습니다.
일괄 수정 (bulkUpdate)
Sequelize에서 일괄 수정을 하는 방법은 3가지가 있습니다. 한 가지씩 소개해드리겠습니다 !
1. update
const result = await User.update({ name: updateUsersDto.name }, {
where: {
id: { [Op.in]: updateUsersDto.users }
}
});
// UserDTO.ts
export interface UpdateStatusDto {
users?: string[];
name: string;
}
Sequelize의 update는 일괄 수정도 가능합니다. 단, 이 방법은 업데이트 내용이 공통적일 경우에만 가능합니다.
즉, 어떤 레코드는 name을 A로 설정하고, 어떤 레코드는 name을 B로 설정할 수 없고, 각기 다른 컬럼을 수정할 수도 없습니다.
2. bulkCreate option - updateOnDeuplicate
const result = await User.bulkCreate(updateUsersDto, {
updateOnDuplicate: ["name"]
});
Sequelize의 bulkCreate option 중 updateOnDeuplicate를 사용하면 일괄 upsert를 칠 수 있습니다. 가장 많이 사용되는 방법이지만, 일부 컬럼을 대상으로는 사용할 수 없습니다. update가 아니라, upsert 개념이기 때문에 모든 컬럼이 있어야만, 적합합니다. RestAPI의 PUT에는 어울린다고 볼 수 있습니다 !
3. update each
Array.from(updateUsersDto).forEach((v) => {
User.update( { name: v.name }, { where: { id: v.id } })
});
for each문을 이용해서 하나씩 update를 칠 수도 있습니다. 위 두방법이 적용이 어렵다면, 이렇게 반복을 하거나, 공통적인 정보가 있다면 destroy를 해서 한번에 삭제를 한 후 bulkCreate로 다시 생성하는 방법도 있습니다.
감사합니다.
'Server > Node.js' 카테고리의 다른 글
Sequelize - bigint를 사용하는 방법? (+ underscored) (0) | 2022.01.11 |
---|---|
Sequelize - 커스텀 메서드 (Custom method) 구현 (0) | 2022.01.08 |
NodeJS - 전역 예외 핸들러 구현 (Custom global exception handler) (0) | 2021.12.29 |
NodeJS - API Response를 snake case로 변환하기(DTO, Entity 필드는 camel case) (0) | 2021.12.27 |
NodsJS - BullMQ 사용 (대기열, 동시성 제어 등) (0) | 2021.12.25 |