gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:58 26 4
gpt4 key购买 nike

我有一个餐厅模型,其属性“位置”的类型为 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
)
),
})

最佳答案

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

检查 doc ,注意最后一个查询:

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

关于node.js - Sequelize - 在 where 子句中的列上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com