Указание определенных полей с помощью Sequelize (NodeJS) вместо *

Хорошо, поэтому у меня есть проект в NodeJS, где я использую Sequelize для MySQL ORM. Эта вещь работает фантастически, однако я пытаюсь выяснить, есть ли способ указать, какие поля возвращаются на основе запроса или если есть способ просто сделать.query() где-нибудь.

Например, в нашей пользовательской базе данных могут быть смешные количества записей и столбцов. В этом случае мне нужно вернуть только три столбца, чтобы быстрее получить только те столбцы. Однако Sequelize просто запрашивает таблицу для всего "*", чтобы максимально полно реализовать полную объектную модель. Это функциональность, которую я бы хотел обойти в этой конкретной области приложения.

Ответ 1

Вы должны указать атрибуты как свойство в объекте, который вы передаете findAll():

Project.findAll({attributes: ['name', 'age']}).on('success', function (projects) {
  console.log(projects);
});

Как я нашел это:

Запрос сначала вызывается здесь: https://github.com/sdepold/sequelize/blob/master/lib/model-definition.js#L131
Затем создаются здесь: https://github.com/sdepold/sequelize/blob/master/lib/connectors/mysql/query-generator.js#L56-59

Ответ 2

Попробуйте это в новой версии

template.findAll({
    where: {
        user_id: req.params.user_id //array
    },
    attributes: ['id', 'template_name'], //object
}).then(function (list) {
    res.status(200).json(list);
})