HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤩
개발
/
NodeJs
NodeJs
/
Sequelize
Sequelize
/
Query

Query

Return flat object from sequelize with association
  • include를 통해 얻은 객체는 nested 되어 있어서 그것을 flat하게 바꾸려면 raw:true 옵션 추가해주면 됨
const newsList = await News.findAll({ attributes: ['no', 'writer', 'title', 'viewCnt', 'createdAt'], order: [['created_at', 'DESC']], offset: (page - 1) * size, limit : size, include : [{ model: NewsCategory, attributes: ['name'], where : { name: category, } }], raw: true, }, ); /* { "no": 2, "writer": "작성자", "title": "제목2", "viewCnt": 0, "createdAt": "2022-10-23T12:27:40.000Z", "NewsCategory.name": "general" }, */
  • 또는, 더 정확한 방법은 sequelize.col을 사용
    • const newsList = await News.findAll({ attributes: ['no', 'writer', 'title', 'viewCnt', 'createdAt', [sequelize.col('NewsCategory.name'), 'name']], order: [['created_at', 'DESC']], offset: (page - 1) * size, limit : size, include : [{ model: NewsCategory, attributes: [], where : { name: category, } }], }); /* { "no": 2, "writer": "작성자", "title": "제목2", "viewCnt": 0, "createdAt": "2022-10-23T12:27:40.000Z", "name": "general" }, */
      let admin = await Admin.scope("withPassword").findOne({ where: sequelize.where( sequelize.fn("BINARY", sequelize.col("Admin.email")), req.body.email ), attributes: { include: [ [sequelize.col('organization.id'), 'organizationId'], [sequelize.col('organization.name'), 'organizationName'] ] }, include: [{ model: Organization, attributes: [], as: "organization" }], // raw: true }); /* "admin": { "id": 47, "email": "rlfrmsdh@lguplus.co.kr", "name": "길근오1", "phone": "01011112221", "type": "ADMIN", "createdAt": "2023-04-27T09:11:04.000Z", "updatedAt": "2023-05-16T06:31:40.000Z", "passwordSetAt": "2023-05-15T05:24:52.000Z", "description": null, "passwordTryCount": 0, "organizationId": 1, "organizationName": "UPLUS" } */