【问题标题】:How to pass a seed value to random order function in Sequelize如何将种子值传递给 Sequelize 中的随机顺序函数
【发布时间】:2020-12-07 19:05:32
【问题描述】:

在 SQL 方言中,您可以随机排序,并且可以将种子传递给 random 函数以获得可重复的随机行顺序。

在 MySQL 中你会这样做:

SELECT * FROM `users` ORDER BY RAND("192.168.1.1")

我知道在使用 Sequelize 查询时如何使用 RAND 函数:

users.findAll({
  order: [sequelize.random()],
});

我似乎不知道如何将种子传递给随机函数。

我看过文档:https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-method-random

看起来sequelize.random() 函数不带任何参数。

这可能吗?

【问题讨论】:

标签: javascript sql node.js sequelize.js


【解决方案1】:

如果您希望您的查询仅在 MySQL 中有效,那么只需使用 sequelize.fn:

users.findAll({
  order: [sequelize.fn('RAND', '192.168.1.1')],
});

【讨论】:

  • 只是一个修正,实际函数是RAND而不是RANDOM。您能否为可能偶然发现这篇文章的其他人编辑您的答案。
【解决方案2】:

在没有任何官方文档提及该问题的情况下,definition of the sequelize.random() method in sequelize.js (line 892) 表明它目前不接受任何参数,并且只是作为一种方法来正确构建依赖于配置使用的特定 RDBMS 的查询。

因此,可以肯定地说,在撰写本文时,默认情况下,sequelizemaster 分支目前不支持; @Anatoly 的回答展示了如何通过在自己的项目中利用 sequelize.fn 来实现这一目标。

【讨论】:

  • 是的,感谢您的调查!我可能会提出拉取请求来添加它,但我标记了@Anatoly 对这个问题的回答,因为它现在是一种解决方法。
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
相关资源
最近更新 更多