안녕하세요 @realmankwon 입니다.
sequelize에서 한번에 여러건의 데이터를 저장하고 싶을때가 있습니다.
여러건을 for와 같은 반복문으로 저장하게 되면 ACID(원자성, 일관성, 고립성, 지속성)중에서 원자성을 만족하지 못하게 됩니다.
때문에 transaction 을 통하여 commit, rollback 을 작성해주어야 하는데 가끔씩 귀찮을때가 있습니다.
이를 위해서 sequelize는 bulkCreate, bulkUpdate 를 제공해 주고 있습니다.
저장할 데이터를 json 형태의 배열로 만들어서 위의 함수를 호출하면 한방에 저장하거나 수정할 수가 있습니다.
당연하겠지만 이때 중복된 데이터가 있으면 오류가 발생하게 됩니다.
넣을때부터 중복되지 않은 데이터를 넣으면 좋겠지만 api 를 통해서 받아온 데이터의 경우에는 검증을 해야할 때가 있습니다.
이때 유용한 것이 배열의 some 입니다.
간단하게 반복문 내에서 아래와 같이 동일한 값이 있으면 스킵하도록 작성을 하면 중복없이 배열을 생성할 수가 있습니다.
if(results.some(result => result.block + data.timestamp === data.block + data.timestamp))
continue;