Указание определенных полей с помощью 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);
})