#node.js #postgresql #sequelize.js
#node.js #postgresql #sequelize.js
Вопрос:
Я использую расширение Postgres ‘earthdistance’ для вычисления широты / дальности.
Я также использую Sequelize для доступа к базе данных, и я хочу определить метод получения для вычисления и сортировки по расстоянию от набора координат.
Следующий запрос работает нормально:
SELECT name,
earth_distance(ll_to_earth( 51.5241182, -0.0758046 ),
ll_to_earth(latitude, longitude)) as distance_from_current_location
FROM "Branches"
ORDER BY distance_from_current_location ASC;
И я могу использовать его с помощью sequelize.запрос (), но я хочу сохранить все запросы модели частью модели.
Как я могу указать, ГДЕ условия внутри метода getter в определении модели?
Спасибо!
Комментарии:
1. Я хочу сделать то же самое в postgres, используя sequelize. Что вы в итоге сделали?
Ответ №1:
Вероятно, лучше всего обернуть запрос в хранимую процедуру и передать аргументы, которые вы хотите использовать в предложении where . Поскольку хранимые процедуры скомпилированы, это будет работать лучше, чем динамический SQL, где вы генерируете предложение WHERE на лету.
Добавьте любые параметры и типы в ваш хранимый процесс по мере необходимости, и результат будет выглядеть примерно так:
CREATE FUNCTION GetEarthDistance (v_Foo bigint) RETURNS type AS $$
DECLARE
v_Name varchar(256);
BEGIN
SELECT name INTO v_Name,
earth_distance(ll_to_earth( 51.5241182, -0.0758046 ),
ll_to_earth(latitude, longitude)) as distance_from_current_location
FROM Branches
WHERE somecol > v_foo
ORDER BY distance_from_current_location ASC;
RETURN v_Name;
END;
$$ LANGUAGE 'plpgsql';