Server/Node.js

Sequelize - 일괄 등록, 일괄 수정 하기 (bulk create, bulk update)

JaeHoney 2022. 1. 5. 22:18

일괄 등록 (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로 다시 생성하는 방법도 있습니다.

 

감사합니다.