NodeJS 如何用sequelize得到一行的不同值?

h5qlskok  于 2023-02-21  发布在  Node.js
关注(0)|答案(6)|浏览(125)

我有值的表

id country 
1  india
2  usa
3  india

我需要使用sequelize.js从country列中查找非重复值
下面是我的示例代码...

Project.findAll({

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

有什么方法可以找到distict值吗

dz6r00yl

dz6r00yl1#

可以使用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) {  })
uqxowvwt

uqxowvwt2#

最后我使用了这样的分组方法:

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(...)
q3aa0525

q3aa05253#

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

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

siv3szwd4#

您可以使用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`;
ejk8hzay

ejk8hzay5#

您可以使用原始查询来获取结果或sequelize.fn()
Here’s the documentation on Sequelize raw queries.

wrrgggsh

wrrgggsh6#

您可以简单地使用下面的代码来获得所需的输出:

Project.findAll({
  attributes: ['country'],
  distinct: true,
  col: '__Column name you want to distinct with__'
}).then(function(country) {
     ...............
});

经过长时间的查找和调试,我找到了这个解决方案,它也可以和INCLUDE子句一起工作,例如:

Project.findAll({
  where: {....}
  attributes: ['country'],
  include: [.....],
  distinct: true,
  col: '__Column name you want to distinct with__'
}).then(function(country) {
...............
});

相关问题