小编Joa*_*him的帖子

Sequelize - where 子句中的列上的函数

我有一个带有 GEOMETRY("Point") 类型的属性“位置”的餐厅模型。我正在尝试使用 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})
});
Run Code Online (Sandbox Code Playgroud)

我不知道我应该写什么 xxx 在哪里。我尝试了各种方法,但每次都会出错。在选择查询中,我首先调用一个函数来从用户当前所在的坐标(纬度、经度)创建一个点。然后我使用一个函数来计算到餐厅位置的距离。
顺便说一句,我正在使用 postgres。

编辑:最终这样做:

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'), …
Run Code Online (Sandbox Code Playgroud)

postgresql node.js sequelize.js

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

node.js ×1

postgresql ×1

sequelize.js ×1