Node.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

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

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

sequelize.query('sql goes here', null, { raw: plain }).success(function(data){
    console.log(data)
})
玩得开心:)

更新

  • Sequelize现在使用
    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']})