【问题标题】:Functions in Sequelize and WHERE 1=1Sequelize 和 WHERE 1=1 中的函数
【发布时间】:2020-10-14 12:05:19
【问题描述】:

我有问题。我是 Sequelize 的新手,正在运行以下代码

     const nearMeetis = await Meeti.findAll({
        where: Sequelize.where( Sequelize.fn( "ST_DistanceSphere",
        Sequelize.fn( "ST_MakePoint", parseFloat( -39.4193 ), parseFloat( -64.1795 ) ),
        Sequelize.col( "location" )), {
            [Op.lte]: 500
          }),
         logging: function(q){
            //console.log("q:", q);
         }
     }) 

Sequelize生成的SQL是:

SELECT "idMeeti", "title", "slug", "speaker", "quantity", "description", "date", "hour", "address", "city", "state", "country", "location", "interested", "createdAt", "updatedAt", "userId", "groupId" FROM "meetis" AS "meeti" WHERE 1=1;

如果我在 SQL 查询编辑器中运行以下 SQL 查询并得到正确的结果:

SELECT ST_DistanceSphere(ST_MakePoint(-39.4193, -64.1795), "location")  AS "distance", "idMeeti", "title"
FROM meetis
WHERE ST_DistanceSphere(ST_MakePoint(-39.4193, -64.1795), "location") < 500

我正在使用:

PostgreSQL 12.3 和 Sequelize 5.1.0

希望有人能帮助我。

提前致谢!

更新

问题已解决。问题是我将 Sequelize 导入并使用为 const Sequelize = require('Sequelize'),而不是使用 sequelize 从 db 实例 (const sequelize = require('../../config/db')) 导入。

【问题讨论】:

  • R u using postgis?,您的 postgres 服务器上似乎没有启用 PostGIS。
  • @cybercoder,是的,我正在使用 PostGIS。当我运行 SQL raw(在 tableplus 中)时,它可以工作,所以,我认为问题出在 Sequelize 中。谢谢
  • 看到这个问题的答案,May Alias 是你的问题。 stackoverflow.com/questions/44012932/…
  • @cybercode,我也试过了,但没用。这篇文章基于 MySQL 而不是 PostgreSQL。谢谢。
  • 这个问题以及更新中的答案值得更多的认可。在找到这个之前,我花了几个小时进行故障排除。谢谢。

标签: node.js postgresql sequelize.js


【解决方案1】:

您应该像这样更正Sequelize.where 调用:

  const nearMeetis = await Meeti.findAll({
    where: Sequelize.where( Sequelize.fn("ST_DistanceSphere",
    Sequelize.fn( "ST_MakePoint", parseFloat(-39.4193), parseFloat(-64.1795)),
    Sequelize.col("location")), Op.lte, 500),
     logging: function(q){
        //console.log("q:", q);
     }
 }) 

Sequelize.where in the documentation

【讨论】:

  • 您好,感谢您的回复。我尝试了您的代码,但仍然无法正常工作。 SQL 日志,给我相同的结果 WHERE 1=1。
  • 我用几何列shape 对我的表尝试了where: database.Sequelize.where(database.Sequelize.fn("ST_DistanceSphere", database.Sequelize.fn("ST_MakePoint", parseFloat(-39.4193), parseFloat(-64.1795)), database.Sequelize.col("shape")), Op.lte, 500), 并将`AND ST_DistanceSphere(ST_MakePoint(-39.4193, -64.1795), "shape")
  • 嗨。我什至在 Postgree 中尝试过重置,但仍然无法正常工作。您使用的是什么版本的 sequelizePostgreSQL?您的模型中的字段是如何定义的?谢谢!
  • Sequelize 4,PostgreSQL 9.6,字段类型为Geometry
  • Sequelize.where 语法没有从 v4 更改为 v5。
猜你喜欢
  • 1970-01-01
  • 2020-02-05
  • 2015-04-14
  • 2021-10-31
  • 2023-03-03
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多