2011-11-07 3 views
24

D'accord, j'ai un projet dans NodeJS où j'utilise Sequelize pour un ORM MySQL. La chose fonctionne de manière fantastique 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 juste 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, donc il serait plus rapide d'obtenir seulement ces colonnes. Cependant, Sequelize interroge simplement la table pour tout "*" afin de remplir autant que possible le modèle objet complet. C'est la fonctionnalité que je voudrais contourner dans cette zone particulière de l'application.Spécification de champs spécifiques avec Sequelize (NodeJS) au lieu de *

+0

oh wow, il y a maintenant de la documentation à ce sujet: -/lame. alessioalex a raison. – sdepold

Répondre

43

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

+1

Hey pouvez-vous s'il vous plaît vérifier les liens, ils semblent être brisés – sunitj

4

Essayez ceci dans la version nouvelle

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