Sequelize - 在where子句中的列上运行

时间:2017-01-10 21:56:46

标签: node.js postgresql sequelize.js

我有一个餐厅模型,其中包含GEOMETRY(“Point”)类型的属性“location”。我正在尝试用sequelize写一个查询,它会给我所有在某个半径范围内的餐馆:

models.Restaurant.findAll({
    attributes: ["*", [models.sequelize.fn("ST_Distance_Sphere", models.sequelize.fn("ST_MakePoint", latitude, longitude), models.sequelize.col("location")), "distance"]],
    where: {
        xxx: {
            $lte: radius
        }
    }
}).then(function(dishes) {
    res.status(200).json({dishes: dishes})
});

我不知道我应该写什么xxx。我尝试了各种各样的事情,但每次都会出错。 在select查询中,我首先调用一个函数来从坐标(纬度,经度)创建一个点到用户当前所在的位置。然后我用一个函数来计算到餐馆位置的距离 我正在使用postgres btw。

编辑:结束这样做:

models.Restaurant.findAll({
    attributes: [
      'id',
      'name',
      'addressLine1',
      'addressLine2',
      'city',
      'zipPostalCode',
      'location',
      'phoneNumber',
      'website',
      [
        models.sequelize.fn(
          'ST_Distance_Sphere', models.sequelize.fn('ST_MakePoint', lat, long), models.sequelize.col('location')
        ),
        'distance',
      ],
    ],
    where: models.sequelize.and(
      models.sequelize.where(
        models.sequelize.fn(
          'ST_Distance_Sphere', models.sequelize.fn('ST_MakePoint', lat, long), models.sequelize.col('location')
        ), '>', fromRadius),
      models.sequelize.where(
        models.sequelize.fn(
          'ST_Distance_Sphere', models.sequelize.fn('ST_MakePoint', lat, long), models.sequelize.col('location')
        ), '<=', toRadius),
      models.sequelize.where(
        models.sequelize.col('Restaurant.is_online'), true
      )
    ),
  })

1 个答案:

答案 0 :(得分:2)

我假设 radius 是用户所在的计算点, xxx应该是距离

检查doc,注意上次查询:

Model.findAll({
     where: sequelize.where(sequelize.fn('FUNCTION',
            sequelize.col('field')), 'value')
});