sequelize
에서 eager-loading
을 통해 관계있는 모델을 가져올 때 관계있는 모델의 데이터 순서(order
)를 정하는 방법에 대해 알아보자.
Eager-Loading이란 : associated 된 여러 모델들을 한 번에 querying하는 것이다.
Manual | Sequelize
어느 유저의 정보와 그 유저가 작성한 게시글들의 데이터도 같이 가져오려고 할 때, 게시글들을 최신 게시글이 맨 앞에 오도록 정렬하기 위해서 다음과 같은 명령을 적용하였는데 적용되지 않고 최신 게시글이 맨 마지막으로 정렬되었다.
db.User.findOne({
where: {
[Op.or]: [
{ id: isUserId },
{ nickname: decodeURIComponent(req.params.userData) },
],
},
include: [
{
model: db.Post,
as: 'Posts',
order: [['createdAt', 'DESC']], // 결론적으로 여기에 order를 정의하면 안된다.
required: false,
include: [
{
model: db.Image,
},
],
},
참조: node.js - Ordering results of eager-loaded models in Node Sequelize - Stack Overflow
불러오려는 모델에서 order
를 정의하지 않고, 원래 명령의 가장 상위(여기에서는 User
)에서 order: [[{ model: [Model Name], as: [Model as Name]}, 'createdAt', 'DESC']],
명령을 추가해주면 되었다.
db.User.findOne({
where: {
[Op.or]: [
{ id: isUserId },
{ nickname: decodeURIComponent(req.params.userData) },
],
},
order: [[{ model: db.Post, as: 'Posts'}, 'createdAt', 'DESC']], // 여기에 정의할 것
include: [
{
model: db.Post,
as: 'Posts',
required: false,
include: [
{
model: db.Image,
},
],
},