Spécifier des champs spécifiques avec Sequelize (NodeJS) au lieu de *

D'accord, j'ai donc un projet dans NodeJS où j'utilise Sequelize pour un ORM MySQL. La chose fonctionne fantastiquement mais j'essaie de comprendre s'il y a un moyen de spécifier quels champs sont retournés sur une base de requête ou s'il y a même un moyen de faire un .query() quelque part.

Par exemple, dans notre base de données utilisateur, il peut y avoir des quantités ridicules d'enregistrements et de colonnes. Dans ce cas, je dois retourner trois colonnes seulement pour qu'il soit plus rapide d'obtenir seulement ces colonnes. Cependant, Sequelize interroge simplement la table pour tout " * " pour remplir le modèle d'objet complet autant que possible. C'est la fonctionnalité que je voudrais contourner dans ce domaine particulier de l'application.

27
demandé sur Aric 2011-11-07 21:08:53

2 réponses

, Vous devez spécifier les attributs en tant que propriété de l'objet que vous passez à findAll():

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

Comment j'ai trouvé ceci:

La requête est d'abord appelée ici: https://github.com/sdepold/sequelize/blob/master/lib/model-definition.js#L131
Puis, se construit ici: https://github.com/sdepold/sequelize/blob/master/lib/connectors/mysql/query-generator.js#L56-59

53
répondu alessioalex 2011-11-08 06:37:44

Essayez ceci dans nouvelle version

            template.findAll({
              where: {
            user_id: req.params.user_id //array
        },
            attributes: ['id', 'template_name'], //object
            }).then(function (list) {
            res.status(200).json(list);
        })
6
répondu Adiii 2017-02-02 13:42:35