Nest옵션은 Association을 통해 만들어진 Result-set을 보기 좋게, 사용하기 용이하게, 객체형태로 만들어주는 옵션이다.
아래와 같이 Association을 할 때 옵션으로 nest: true 라고 적어서 사용할 수 있다.
const joinResult = await trails.findAll({
include: [
{
model: locations,
required: true,
attributes: ['location1', 'location2', 'location3', 'location4', 'location5'],
where: {
id: findRef.locationId,
},
},
{
model: users,
required: true,
where: {
id: findRef.userId,
},
},
{
model: categories,
required: true,
where: {
id: findRef.categoryId,
},
},
{
model: images,
required: false,
where: {
id: findRef.imageId,
},
},
],
nest: true,
raw: true,
});
테스트한 전/후 결과는 아래와 같다.
nest 옵션 적용 전에는 같은 계층에서 join된 데이터들이 정렬되어 있었지만, 옵션 적용 후에는 json형식이어도 join된 데이터들이 각각의 계층으로 정렬되어 있는 것을 확인할 수 있었으며, 클라이언트에서 parsing을 하면 온전한 객체형태의 데이터로 사용할 수 있게 된다.
{
id: 1,
userId: 1,
locationId: 1,
categoryId: 1,
imageId: null,
title: 'trail1',
review: 'aaaaaaaaaaaaaaaaaaa',
adminDistrict: null,
createdAt: 2020-01-20T15:36:56.000Z,
updatedAt: 2020-01-20T15:36:56.000Z,
'location.location1': '[127.1596250438903,37.36655878159279]',
'location.location2': '[127.16066361895653,37.36655737541724]',
'location.location3': '[127.16080054662963,37.36724196874028]',
'location.location4': '[127.15976394906102,37.36818043988212]',
'location.location5': '[127.15890377295123,37.36713640914249]',
'user.id': 1,
'user.email': 'junyong1@naver.com',
'user.password': 'bfdebd345f9bfa6687cfb8d6d02942351a2f41ad7171b087666442df887170f6883a5b4d975eab5c2dd57ad6f89fa592bf7af0071c31fe191940642991bb9c3f',
'user.username': 'junyong1',
'user.createdAt': 2020-01-20T15:36:15.000Z,
'user.updatedAt': 2020-01-20T15:36:15.000Z,
'category.id': 1,
'category.tag': 'With pet',
'category.createdAt': 2020-01-20T15:36:56.000Z,
'category.updatedAt': 2020-01-20T15:36:56.000Z,
'image.id': null,
'image.fileName': null,
'image.filePath': null,
'image.createdAt': null,
'image.updatedAt': null
}
{
"id": 1,
"userId": 1,
"locationId": 1,
"categoryId": 1,
"imageId": null,
"title": "trail1",
"review": "aaaaaaaaaaaaaaaaaaa",
"adminDistrict": null,
"createdAt": "2020-01-20T15:36:56.000Z",
"updatedAt": "2020-01-20T15:36:56.000Z",
"location": [
"[127.1596250438903,37.36655878159279]",
"[127.16066361895653,37.36655737541724]",
"[127.16080054662963,37.36724196874028]",
"[127.15976394906102,37.36818043988212]",
"[127.15890377295123,37.36713640914249]"
],
"user": {
"id": 1,
"email": "junyong1@naver.com",
"password": "bfdebd345f9bfa6687cfb8d6d02942351a2f41ad7171b087666442df887170f6883a5b4d975eab5c2dd57ad6f89fa592bf7af0071c31fe191940642991bb9c3f",
"username": "junyong1",
"createdAt": "2020-01-20T15:36:15.000Z",
"updatedAt": "2020-01-20T15:36:15.000Z"
},
"category": {
"id": 1,
"tag": "With pet",
"createdAt": "2020-01-20T15:36:56.000Z",
"updatedAt": "2020-01-20T15:36:56.000Z"
},
"image": {
"id": null,
"fileName": null,
"filePath": null,
"createdAt": null,
"updatedAt": null
}
}