Sequelize选择不同的行

shk*_*shk 7 node.js sequelize.js

有没有办法使用sequelize.js从表中选择不同的行?我查看了文档,但"finder方法"没有指定完成此任务的方法.

Pas*_*wig 15

假设您要将DISTINCT应用于以下查询:

Tuple.findAll({attributes: ['key', 'value']});
Run Code Online (Sandbox Code Playgroud)

那么这是一种(hackish)方式来实现你想要的,而不必自己编写整个查询:

Tuple.findAll({attributes: [[Sequelize.literal('DISTINCT `key`'), 'key'], 'value']});
Run Code Online (Sandbox Code Playgroud)

(使用Sequelize v2.1.0测试)

编辑2015-06-08:仍然适用于Sequelize v3.1.1


小智 5

编辑你的"node_modules/sequelize/lib/dialects/mysql/query-generator.js"

在118号线附近

更改

var query = "SELECT <%= attributes %> FROM <%= table %>"
Run Code Online (Sandbox Code Playgroud)

var query = "SELECT " + ((options.distinct)? 'DISTINCT ':'') +"<%= attributes %> FROM <%= table %>",
Run Code Online (Sandbox Code Playgroud)

现在您可以distinct: true在续集请求中添加一个选项

希望它有所帮助-_ ^

  • (...不要这样做。下次更新软件包时它将被覆盖。) (2认同)

Ali*_*fat 5

您可以执行以下操作:

myModel.findAll({
  attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias_name']],
  where:{}
}).then(data => {}).....
Run Code Online (Sandbox Code Playgroud)

问题中提取出来并且有效。


Afe*_*een 5

Model.findAll({Attributes: ['col_name1', 'col_name2'], group: ['col_name1', 'col_name2']});
Run Code Online (Sandbox Code Playgroud)

Sequelize 5.21 完全没问题


sde*_*old 3

这是不可能自动完成的,但如果你不介意自己创建 sql,你可以这样做:

sequelize.query('sql goes here', null, { raw: plain }).success(function(data){
    console.log(data)
})
Run Code Online (Sandbox Code Playgroud)

玩得开心 :)

更新

  1. Sequelize 现在使用then而不是作为successPromise 函数。
  2. Sequelize.query已被重构为仅使用参数sqloptions
  3. raw接受true/false但不plain作为价值。

因此,根据新版本,代码应该如下所示:

    sequelize.query('sql goes here', { raw: true }).then(function(data){
        console.log(data);
    });
Run Code Online (Sandbox Code Playgroud)

  • 是的,不确定它是否会出现在下一个版本中,但我们应该添加它 (2认同)