Node.js 继续选择不同的行
有没有办法使用sequelize.js从表中选择不同的行?Node.js 继续选择不同的行,node.js,sequelize.js,Node.js,Sequelize.js,有没有办法使用sequelize.js从表中选择不同的行? 我查阅了文档,但“finder方法”没有指定完成此任务的方法。这不可能自动完成,但如果您不介意自己创建sql,您可以这样做: sequelize.query('sql goes here', null, { raw: plain }).success(function(data){ console.log(data) }) 玩得开心:) 更新 Sequelize现在使用then而不是success作为承诺函数 Sequeliz
我查阅了文档,但“finder方法”没有指定完成此任务的方法。这不可能自动完成,但如果您不介意自己创建sql,您可以这样做:
sequelize.query('sql goes here', null, { raw: plain }).success(function(data){
console.log(data)
})
玩得开心:)
更新
then
而不是success
作为承诺函数Sequelize.query
已被重构为仅使用参数sql
和选项
raw
接受true/false
但不接受plain
作为值 sequelize.query('sql goes here', { raw: true }).then(function(data){
console.log(data);
});
编辑“node_modules/sequelize/lib/dialogs/mysql/query generator.js”
在118号线附近
改变
var query = "SELECT <%= attributes %> FROM <%= table %>"
var query=“从中选择”
进入
var query=“选择”+((options.distinct)?“distinct”:“”)+“FROM”,
现在,您可以在sequelize请求中添加一个选项distinct:true
希望对您有所帮助-^从Sequelize 1.7版开始,select查询已移动到lib/dialogs/abstract/query-generator.js中 在1167行附近,换车 mainQueryItems.push(“选择”+mainAttributes.join…) 到
顺便说一下,我使用Sqlite和Postgres,它们都支持“DISTINCT”。如果您使用的方言不支持distinct,那么显然这一行会给您带来问题,因为它将为您使用的所有SQL风格生成。我怀疑这就是为什么这个简单的更改没有进入主Sequelize源代码树的原因。假设您希望对以下查询应用DISTINCT:
Tuple.findAll({attributes: ['key', 'value']});
那么,这是一种(黑客式)实现您想要的功能的方法,而无需自己编写整个查询:
Tuple.findAll({attributes: [[Sequelize.literal('DISTINCT `key`'), 'key'], 'value']});
(使用Sequelize v2.1.0进行测试)
编辑2015-06-08:仍然适用于Sequelize v3.1.1这与Pascal Ludwig提出的解决方案有些相似,但对于那些登陆此处希望获得给定列的不同值列表的用户,您可以执行以下操作:
MyModel.aggregate('teh_field', 'DISTINCT', { plain: false }).then(...)
// Resolves to: [ { DISTINCT: value1 }, { DISTINCT: value2 }, ... ]
myModel.findAll({
attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias_name']],
where:{}
}).then(data => {}).....
这样,就很容易将其转换为标准列表:
MyModel.aggregate('teh_field', 'DISTINCT', { plain: false })
.map(function (row) { return row.DISTINCT })
.then(function (tehValueList) {
// tehValueList = [ value1, value2, ... ]
})
;
您可以执行以下操作:
MyModel.aggregate('teh_field', 'DISTINCT', { plain: false }).then(...)
// Resolves to: [ { DISTINCT: value1 }, { DISTINCT: value2 }, ... ]
myModel.findAll({
attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias_name']],
where:{}
}).then(data => {}).....
这是一个很好的例子
Model.findAll({Attributes: ['col_name1', 'col_name2'], group: ['col_name1', 'col_name2']});
使用Sequelize 5.21完全可以。我得到:)可能在下一个版本中,可以添加bool选项{distinct:true}(默认为false)。是的,不确定它是否会出现在下一个版本中,但我们应该添加它是最优雅的解决方案(…不要这样做。它将在下次更新包时被覆盖。)你知道如果属性中有“distinct”怎么办吗<代码>模型.findAll({属性:[[Sequelize.fn('DISTINCT',Sequelize.col('id')),'id'],'col_name2'],组:['id','col_name2']})代码>