@OrdinaryBoyRus

Как в Sequelize делают сложные запросы с множеством джоинов?

У меня есть таблицы user, role, vote (и планируется favorite).
Я хочу получить одиночного пользователя с ролью (может быть даже несколькими) и со средним значением рейтинга из таблицы vote. Я пробовал разные варианты там возникаю запарки с group by и в общем я не знаю как надо делать правильно. Вот пример общего запроса
const id = req.params.id;
user
.findOne({
  where: { id },
  attributes: [
    "id",
    "username",
    "email",
    "avatar",
    "createdAt",
  ],
  include: [
    { model: role, attributes: ["name"] },
    { model: vote, attributes: ["rate"] },
  ],
})
.then(user => {
  res.status(200).json({ user });
})
.catch(err => {
  console.log(err);
});


данный запрос возвращает json

{
  "id": 2,
  "username": "John Connor",
  "email": "johny@gmail.com",
  "avatar": "/public/static/img/uploads/avatar.jpg",
  "createdAt": "2018-03-05T20:25:56.693Z",
  "role": {
    "name": "USER_ROLE"
  },
  "votes": [
    {
      "rate": 4
    },
    {
      "rate": 5
    },
    {
      "rate": 2
    }
  ]
}

Как видно тут приходит список оценок, как мне вернуть среднюю оценку ?
Как мне сделать что бы роли выводились массивом имен, а не объектами со свойством name ?
И чтобы в избранное тоже выводило массив id-шников, а не массив полных объектов.

Я не знаю как это еще спрашивать. Все как один говорят что используйте postgres он лучше mongoDB. Но как только начинаешь спрашивать что-то про sequelize никто не может ничего рассказать вообще. На русском информации на уровне простых CRUD запросов. Может тут кто-то знает как вообще делают сложные запросы , может я неправильно что-то делаю ?
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
@OrdinaryBoyRus Автор вопроса
Мне ответили тут - вроде работает - может будет кому полезно
https://stackoverflow.com/questions/49150443/how-t...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
https://stackoverflow.com/questions/35807484/avera...

А вообще в рамках холивара - я считаю ORM однозначным злом.
CRUD запросы можно и самому написать, а как только нужно что-то сложнее, или там зафорсить индекс или еще что-то - начинается секс на ровном месте.
Не говоря уже про прискорбное быстродействие в целом.

Ну а выбор mongoDB / postgres это по сути выбор nosql / sql хранилища.
Я опять же сторонник мнения что nosql оправдан в каких-то исключительных случаях, а для проекта в котором планируются реляционные отношения между объектами лучше брать однозначно реляционную базу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы