gpt4 book ai didi

node.js - 如何使用 sequelize 搜索经纬度的数据库表

转载 作者:行者123 更新时间:2023-12-03 22:36:30 24 4
gpt4 key购买 nike

我有一个商店表,它有一列 lat_long ,它将每个商店纬度/经度存储为 sequelize 中的几何点。我想根据来自前端的请求正文的纬度/经度的接近度来搜索商店。已尝试在 Stackoverflow 中利用与此相关的许多相关主题(答案),但了解到的是查询可以这样编写。

const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`);

User.findAll({
attributes: [[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location),'distance']],
order: 'distance',
limit: 10,
logging: console.log
})
.then(function(instance){
console.log(instance);
})

已经尝试过,它工作正常,但我面临的挑战是;在这个例子和我看到的几乎所有样本中,他们使用了只返回距离的属性,但我想返回表中的所有字段。然后我尝试删除该属性,然后我得到的响应没有根据几何(距离)进行搜索,我也尝试使用 where 但出现错误。

下面显示的是我的最新查询,该查询返回错误,请问我该如何处理?谢谢你。
export const getNearestStoreWithCategory = async (lat, long) => {
try {
const location = sequelize.literal(`ST_GeomFromText('POINT(${lat} ${long})')`);
const distance = sequelize.fn('ST_Distance_Sphere', sequelize.literal('lat_long'), location)
const storeArr = await Store.findAll({
order: distance,
where: sequelize.where(distance),
limit: 20
})
return storeArr
} catch (error) {
return error
}
}

最佳答案

https://sequelize.org/v4/manual/tutorial/querying.html 的文档中,我猜测您在示例代码中缺少的是包括到要作为数据库响应返回的字段的距离,而不是仅计算距离并返回;

const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`);

User.findAll({
attributes: {
include: [[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location),'distance']]
},
order: 'distance',
limit: 10,
logging: console.log
})
.then(function(instance){
console.log(instance);
})

这应该给出一个查询; SELECT id, OTHER_FIELDS_OF_THIS_TABLE, ST_Distance_Sphere(geolocation) AS distance ...
现在,这是未经测试的代码,但是您可以尝试一下并评论它是否有帮助。

关于node.js - 如何使用 sequelize 搜索经纬度的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642706/

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