如何使用sequelize获取行的明确值?

时间:2017-01-07 09:03:19

标签: node.js express sequelize.js

我有价值表

id country 
1  india
2  usa
3  india

我需要使用sequelize.js

从country列中找到不同的值

这里是我的示例代码......

Project.findAll({

    attributes: ['country'],
    distinct: true
}).then(function(country) {
     ...............
});

有没有办法找到distict值

5 个答案:

答案 0 :(得分:22)

您可以使用Sequelize.fn

为一个或多个属性指定distinct
Project.findAll({
    attributes: [
        // specify an array where the first element is the SQL function and the second is the alias
        [Sequelize.fn('DISTINCT', Sequelize.col('country')) ,'country'],

        // specify any additional columns, e.g. country_code
        // 'country_code'

    ]
}).then(function(country) {  })

答案 1 :(得分:6)

试试这个:https://github.com/sequelize/sequelize/issues/2996#issuecomment-141424712

Project.aggregate('country', 'DISTINCT', { plain: false })
.then(...)

答案 2 :(得分:2)

我最终使用了这样的分组方式:

Project.findAll({
  attributes: ['country'],
  group: ['country']
}).then(projects => 
  projects.map(project => project.country)
);

它会生成不同的模型,您可以很好地进行迭代。

上一个答案中的链接有点帮助:https://github.com/sequelize/sequelize/issues/2996#issuecomment-141424712

这也很好,但是使用DISTINCT作为列名生成响应:

Project.aggregate('country', 'DISTINCT', { plain: false })
  .then(...)

答案 3 :(得分:1)

您可以使用 group 选项,但是为了避免 MySQL 错误 incompatible with sql_mode=only_full_group_by,您必须将 MAX 函数应用于其他属性。

const countries = await Project.findAll({
  attributes: [
    [Sequelize.fn("MAX", Sequelize.col("id")), "id"],
    "country",
  ],
  group: ["country"],
});

应该生成如下的 sql 查询:

SELECT MAX(`id`) AS `id`, `country` FROM `project` GROUP BY `country`;

答案 4 :(得分:0)

您可以使用原始查询来获取结果或 sequelize.fn()

Here’s the documentation on Sequelize raw queries