Mysql 使用Sequelize(NodeJS)而不是*
好的,我在NodeJS中有一个项目,我正在使用Sequelize作为MySQL ORM。这件事工作得非常好,但是我试图弄清楚是否有一种方法可以指定在查询基础上返回哪些字段,或者是否有一种方法可以在某个地方执行.query()Mysql 使用Sequelize(NodeJS)而不是*,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,好的,我在NodeJS中有一个项目,我正在使用Sequelize作为MySQL ORM。这件事工作得非常好,但是我试图弄清楚是否有一种方法可以指定在查询基础上返回哪些字段,或者是否有一种方法可以在某个地方执行.query() 例如,在我们的用户数据库中,可能有大量的记录和列。在这种情况下,我只需要返回三列,这样就可以更快地获得这些列。然而,Sequelize只是查询表中的所有内容“*”,以尽可能地实现完整的对象模型。这是我想在应用程序的这个特定区域中绕过的功能。必须将属性指定为传递给findAl
例如,在我们的用户数据库中,可能有大量的记录和列。在这种情况下,我只需要返回三列,这样就可以更快地获得这些列。然而,Sequelize只是查询表中的所有内容“*”,以尽可能地实现完整的对象模型。这是我想在应用程序的这个特定区域中绕过的功能。必须将属性指定为传递给findAll()的对象中的属性: 我是如何发现这一点的: 首先在此处调用查询:
然后在这里构建:在新版本中尝试此操作
template.findAll({
where: {
user_id: req.params.user_id
},
attributes: ['id', 'template_name'],
}).then(function (list) {
res.status(200).json(list);
})
使用属性键中的数组。可以为别名创建嵌套数组
Project.findAll({
attributes: ['id', ['name', 'project_name']],
where: {id: req.params.id}
})
.then(function(projects) {
res.json(projects);
})
将产生:
SELECT id, name AS project_name FROM projects WHERE id = ...;
所有答案都是正确的,但我们也可以使用
包括
和排除
Model.findAll({
attributes: { include: ['id'] }
});
Model.findAll({
attributes: { exclude: ['createdAt'] }
});
噢,哇,现在有了关于它的文档:-/lame。Alessio Alex是对的。嘿,你能检查一下链接吗,它们似乎断了。我发现这个答案令人困惑。为什么数组
attributes
会显示//object
?类似的情况发生在where
,它表示//array
,但如果看起来像一个值(number
或string
)。@Camilo oops没关系,忽略注释。它可以是数组、嵌套数组或对象。有关更多详细信息,请查看
Model.findAll({
attributes: { include: ['id'] }
});
Model.findAll({
attributes: { exclude: ['createdAt'] }
});