将 findAll 与计算列序列化

问题描述 投票:0回答:1

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

我需要创建一个复杂的 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
  }
});

但是我收到有关设备表中不存在的错误。我知道它不存在,我在属性中计算了它..

sequelize.js geojson
1个回答
0
投票

您可以简单地使用

Op.and
/
Op.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"
  }
    ]
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.