使用计算列 Sequelize findAll

Sequelize findAll with calculated column

提问人:meastro 提问时间:11/18/2023 更新时间:11/19/2023 访问量:13

问:

我正在尝试找出某个几何图形是否在边界 POLYGON 中。我找到了这个答案(使用 Sequelize 和 postgis 在多边形中查找一个点),但它只描述了如何进行单个 where 检查。

我需要创建一个复杂的where子句。如何使用 ST_Within 使用复杂的 where 子句?

从链接的问题中回答

Device.findAll({
  where: sequelize.where(
    sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
    true
  )
});

我尝试将此值添加到findAll属性中:

Device.findAll({
  attributes: [
    [
      sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
        true
      ), 
      'contains'
    ]
  ]
  where: {
    name: "cellphone",
    contains: true
  }
});

但是我收到一个关于设备表中不存在的包含的错误。我知道它不存在,我在属性中计算了它。

续集.js geojson

评论


答:

0赞 Anatoly 11/19/2023 #1

您可以简单地使用 / 将此几何条件与其他条件组合在一起(取决于您需要获得的内容):Op.andOp.or

Device.findAll({
  where: {
    [Op.and]: [
sequelize.where(
    sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
    true
  ),
  {
     name: "cellphone"
  }
    ]
  }
});