有没有办法使用sequelize.js从表中选择不同的行? 我仔细查看了文档,但“finder方法”没有指定完成此任务的方法。
答案 0 :(得分:13)
假设您要将DISTINCT应用于以下查询:
Tuple.findAll({attributes: ['key', 'value']});
然后这是一种(hackish)方式来实现你想要的,而不必自己编写整个查询:
Tuple.findAll({attributes: [[Sequelize.literal('DISTINCT `key`'), 'key'], 'value']});
(使用Sequelize v2.1.0测试)
编辑2015-06-08:仍适用于Sequelize v3.1.1
答案 1 :(得分:6)
编辑你的“node_modules / sequelize / lib / dialects / mysql / query-generator.js”
在第118行附近
更改
var query = "SELECT <%= attributes %> FROM <%= table %>"
到
var query = "SELECT " + ((options.distinct)? 'DISTINCT ':'') +"<%= attributes %> FROM <%= table %>",
现在您可以在续集请求中添加选项distinct: true
希望它有所帮助-_ ^
答案 2 :(得分:3)
您可以执行以下操作:
myModel.findAll({
attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias_name']],
where:{}
}).then(data => {}).....
取自issues并且有效。
答案 3 :(得分:2)
Model.findAll({Attributes: ['col_name1', 'col_name2'], group: ['col_name1', 'col_name2']});
它与Sequelize 5.21完美配合
答案 4 :(得分:1)
这不可能自动生成,但如果您不介意自己创建sql,可以这样做:
sequelize.query('sql goes here', null, { raw: plain }).success(function(data){
console.log(data)
})
玩得开心:)
<强>更新强>
then
代替success
作为承诺函数。Sequelize.query
已被重构为仅使用参数sql
和options
raw
接受true/false
但不接受plain
作为值。因此,根据新版本,代码应该如下所示:
sequelize.query('sql goes here', { raw: true }).then(function(data){
console.log(data);
});
答案 5 :(得分:1)
这有点类似于Pascal Ludwig提出的解决方案,但对于那些希望获得给定列的不同值列表的人来说,您可以执行以下操作:
MyModel.aggregate('teh_field', 'DISTINCT', { plain: false }).then(...)
// Resolves to: [ { DISTINCT: value1 }, { DISTINCT: value2 }, ... ]
有了它,很容易将其转换为标准列表:
MyModel.aggregate('teh_field', 'DISTINCT', { plain: false })
.map(function (row) { return row.DISTINCT })
.then(function (tehValueList) {
// tehValueList = [ value1, value2, ... ]
})
;
答案 6 :(得分:0)
从Sequelize 1.7版开始,select查询已移至lib / dialects / abstract / query-generator.js。
第1167行,更改
mainQueryItems.push(&#34; SELECT&#34; + mainAttributes.join ....)
到
mainQueryItems.push('SELECT '); if (options.distinct) { mainQueryItems.push('DISTINCT '); } mainQueryItems.push(mainAttributes.join(', ') + ' FROM ' + options.table);
顺便说一句,我使用的是Sqlite和Postgres,它们都支持&#34; DISTINCT&#34;。如果您使用的语言不支持不同,那么这条线显然会给您带来麻烦,因为它会为您正在使用的所有SQL风格生成。我怀疑这就是为什么这个简单的改变没有进入主要的Sequelize源代码树。