IT/프로그래밍

[NodeJS] Sequelize에서 JSON 안에 JSON 처리는 어떻게 해?

홀롤록 2021. 4. 15. 17:02
반응형

간만에 또 이렇게 글을 써 본다.

 

내용은 매우 간략하지만 처음 경험하는 것이라서 이 부분으로 인해 열심히 삽을 팠다!

 

사용 라이브러리
Sequelize : 6.6.1
Node: 12.13.1
RDS: MySQL Aurora

 

위와 같은 환경에서 아래와 같이 테이블을 생성했다.

 

Schema

sequelize.define(
'test'
{
  name: {
    type: DataTypes.STRING(10),
    allowNull: false,
    comment: '테스트 테이블내 컬럼, 이름'
  },
  contents: {
      type: DataTypes.JSON,
      allowNull: false,
      comment: '테스트 내용',
  },
};

위와 같은 스키마를 정의했다는 가정하에 데이터는 아래와 같다.

{
  name: '테스트',
  contents: {
    blog: {
       content: 'Sequelize JSON 첫경험',
       timestamp: 11111111,
    },
   more: {
       content: '그냥 하나 더~',
       timestamp: 12345678
   },
};

이런 데이터가 들어갈 것이고 과연 이 JSON 데이터를 업데이트 하고 싶으면 어떻게 할까?

순수 쿼리로 짜는 건 매우 쉽다.

update from test
set contents = JSON_SET(contents, '$_blog', JSON_OBJECT('content', '1234', 'timestamp', 12341234)
where name = '테스트';

이 내용을 Sequelize 에서 제공하는 Sequelize.fn 메서드를 호출해서 적용하려 했는데 
JSON_OBJECT 부분이 And 로 작성되는 문제가 생겼다.

시간이 없어서 먼저는
Sequelize.literal(`JSON_SET(contents, '$_blog', JSON_OBJECT('content', '1234', 'timestamp', 12341234)`);

이렇게 처리를 하였으며 매우 정상적으로 해당 키 값에 해당 컬럼 값만 업데이트가 되는 것을 확인했다.

 

위 JSON_SET, JSON_OBJECT 등에 대해서는 MySQL 지원 함수이니 확인해보고 사용하자!
물론, JSON 을 지원하는 DB 버전이어야 할 것이다..
추가로 이걸 이렇게 찾게되면서 JsonPath

 

 

JSONPath 사용법

 

www.lesstif.com

를 알게 되어 새롭게 공부할 게 생겼다.. 휴우..

반응형