У меня есть таблица магазинов, в которой есть столбец lat_long, в котором хранится широта / долгота каждого магазина как геометрическая точка в сиквелизе. Я хочу искать магазины на основе близости широты / долготы от тела запроса от внешнего интерфейса. Я пытался использовать много смежных тем (ответ), касающихся этого, в 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);
})
Пробовал, и он работает нормально, но проблема в том, который; в этом примере и почти во всех примерах, которые я видел, они использовали атрибут, который возвращает только расстояние, но я хочу вернуть все поля в таблице. Затем я попытался удалить атрибут, тогда полученный ответ не был найден на основе геометрии (расстояния), и я также попытался использовать где, но получаю ошибку.
Ниже показан мой последний запрос, который возвращает ошибку пожалуйста, как я могу go об этом? спасибо.
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
}
}