Sequelize에서 JSON 다루기

mayjo
mayjo
Feb 29 · 4 min read

Sequelize에 익숙해지고 있었는데 .. 나를 괴롭힌 JSON … 😩

Raw Query이 아닌 Sequelize에서 제공하는 메소드로 JSON 다루기~!

아래와 같은 Data 있다고 가정해보자.( Sequelize의 컬럼명은 data )

set data := '{"name":"mayjo","favorite":["coffee","travel"]}';

DataTypes.JSON Object 추출

  • JSON_EXTRACT
  • JSON_UNQUOTE

JSON_EXTRACT 는 JSON 데이터를 추출하는데 사용한다.

  • Raw Query
select JSON_EXTRACT(@data, "$.name");
  • Sequelize
Sequelize.fn("json_extract", Sequelize.col("data"), "$.name"
  • 결과값
Image for post
Image for post

JSON_EXTRACT는 따옴표(“”)가 포함해서 출력되는데, JSON_UNQUOTE 사용하면 따옴표를 제거할 수 있다.

  • Raw Query
select JSON_UNQUOTE(JSON_EXTRACT(@data, "$.name")) as "userName";
  • Sequelize
Sequelize.fn("JSON_UNQUOTE", Sequelize.fn("json_extract", Sequelize.col("data"), "$.name"))

attributes에서 사용하는 경우, Aliases 설정시 아래와 같이 쓰면 된다.

[ Sequelize.fn("JSON_UNQUOTE", Sequelize.fn("json_extract", Sequelize.col("data"), "$.name")), "userName" ]
  • 결과값
Image for post
Image for post

DataTypes.JSON Object, Array검색 (Search)

  • JSON_SEARCH

JSON_SEARCH 는 JSON에서 검색 할 때 사용한다. 데이터의 위치를 반환.

두 번째 인자로 ‘one’인 경우에는 최초 검색위치, ‘all’인 경우에는 모든위치를 반환한다.

  • Raw Query
select JSON_SEARCH(, "one", "mayjo");
  • Sequelize
Sequelize.fn("JSON_SEARCH", Sequelize.col("data"), "one", "mayjo"))

where 절에서 사용하는 경우 아래와 같이 쓰면 된다.

Sequelize.where(
Sequelize.fn("JSON_SEARCH",
Sequelize.col("data"), "one", "mayjo"), {
[Op.ne]: null
}
)
  • 결과값
Image for post
Image for post

JSON이 Array인 경우 값이 있는지 확인하려면 두번째 인자를 ‘all’로 쓰면 된다.

  • Raw Query
select JSON_SEARCH(, "all", "coffee");
  • Sequelize
Sequelize.fn("JSON_SEARCH", Sequelize.col("data"), "all", "coffee"))

where 절에서 favorite이 coffee이거나 travel인 경우를 조회할 경우 아래와 같이 쓰면 된다.

[Op.and] : [
Sequelize.where(
Sequelize.fn("JSON_SEARCH",
Sequelize.col("data"), "all", "coffee"), {
[Op.ne]: null
}
),
Sequelize.where(
Sequelize.fn("JSON_SEARCH",
Sequelize.col("data"), "all", "travel"), {
[Op.ne]: null
}
)
]
  • 결과값
Image for post
Image for post

Dreamyoungs

Tech blog of 꿈많은청년들

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store