프로젝트 API중에 카테고리 별로 분류하거나, 카테고리 + 태그 별로 분류하는 기능이 있었다. 아래는 구현한 코드이다.
const getTrackIdsByTag = async ({ tag, category }) => {
const findedTracks = await TrackTag.findAll({
attributes: ["trackId"],
where: {
tag: {
[Op.or]: [tag[0], tag[1], tag[2]],
},
category: category,
},
});
let tags = [];
for (let i = 0; i < findedTracks.length; i++) {
tags.push(findedTracks[i].trackId);
}
const set = new Set(tags);
const result = [...set];
return result;
};
[Op.or] 기능으로 조건들 중 하나라도 만족하면 찾아내게 했지만, 이렇게 하게되면 중복된 데이터가 찾아지는 경우가 있었다.
subquery를 사용해서 데이터 중복없이 바로 구해지게끔 구현하는게 제일 좋을 것 같지만 일단 배포를 위해 Set 을 통해 배열 안에 중복된 데이터를 제거해주고 다시 배열로 만들어 줬다.