【发布时间】:2023-03-03 05:15:21
【问题描述】:
我有一个带有 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})
});
我不知道应该在哪里写 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'), true
)
),
})
【问题讨论】:
标签: node.js postgresql sequelize.js