.map배열 각각에 똑같은 작업을 해서 새 배열로 반환
const surveyids = surveys.map((s) => s.id);
// surveys 배열에서 id만 쏙쏙 뽑아서 새 배열 만들기
// [{id:1, title:"설문A"...}, {id:2, title:"설문B"...}]
//결과 : [1,2]
GROUP BY , DISTINCTGROUP BY
DISTINCT
countMapcountMap 쓰기 전
// answerCounts (DB 결과)
[
{ 'question.surveyId': 1, count: '3' },
{ 'question.surveyId': 2, count: '1' },
]
countMap 쓰면
// countMap (변환 후)
{ 1: 3, 2: 1 }
// 이제 바로 꺼낼 수 있음
countMap[1] // → 3
countMap[2] // → 1
literal()Sequelize가 지원 안 하는 SQL 써야할 때 SQL 그대로 써달라고 전달.
// Sequelize 방식으로는 이걸 표현하기 어려움
COUNT(DISTINCT "Answer"."userId")
// 그래서 그냥 SQL 문자열을 날것으로 넣는 것
literal('COUNT(DISTINCT "Answer"."userId")')
Sequlize 의 findAll 옵션 구조await Answer.findAll ({
attributes: [...], //어떤 컬럼 가져올지
include: [...], // 다른 테이블 JOIN 할지
where: {...}, // 필터 조건
group: [...], // GROUP BY(같은 값끼리 묶어서 집계)
raw: ture, // 결과 형태
)}
const surveys = [
{id: 1, title: '설문1'},
{id: 2, title: '설문2'},
{id: 3, title: '설문3'},
]
for (const survey of surveys) {
//survey = {id:1. title: '설문1'} <- 1번째 루프
//survey = {id: 2, title: '설문2'} <- 2번째 루프
//survey = {id: 3, title : '설문3'} <- 3번째 루프
}