Как я могу получить данные с пользовательскими условиями where? В этом вопросе Sequelize - функция для столбца в предложении where , у меня аналогичная проблема, но я считаю, что в этой функции используются MySQL встроенные функции, и она извлекает данные в пределах радиуса.
У меня несколько моделей.
- Дом
- Адрес
- Задача
Каждый house
ЕСТЬ МНОГО tasks
. и каждый house
ИМЕЕТ ОДИН address
.
При звонке /getTasks
мне нужно получить всю миссию, НО с ограничением:
домашний адрес прямое расстояние должно составлять N километров от широты и долготы запроса.
Я могу просто сделать это, используя findAndCountAll
, а затем выполнить вычисление, прежде чем возвращать результат клиенту, НО я уверен, что это будет либо работать медленнее / менее эффективно, либо это нарушит разбиение на страницы.
Вот что у меня есть:
// Get all the available tasks.
// Requirements:
// 1. It accepts the coordinate from the client.
// 2. The client's coordinate must be <= N-Kilometer straight distance.
// 3. Return the tasks WITH PAYMENT and WITHOUT assigned USER.
exports.getTasks = (req, res) => {
const latitude = parseFloat(req.query.latitude)
const longitude = parseFloat(req.query.longitude)
if (!longitude || !latitude) {
return res.status(200).send({
errorCode: 101,
message: "Error! Required parameters are: {longitude} and {latitude}."
})
}
const page = myUtil.parser.tryParseInt(req.query.page, 0)
const limit = myUtil.parser.tryParseInt(req.query.limit, 10)
const houseLat = 32.9697
const houseLong = -96.80322
console.log("Computing distance of a house (" + latitude + ", " + longitude + ") --- to (" + houseLat + ", " + houseLong + ")")
point1 = new GeoPoint(latitude, longitude)
point2 = new GeoPoint(pLat, pLong)
const distance = point1.distanceTo(point2, true)
// Begin query...
db.Task.findAndCountAll({
where: null, // <----- don't know what to put.
include: [
{
model: db.Order,
as: "order"
},
{
model: db.House,
as: "house",
include: [
{
model: db.Address,
as: "address"
}
]
}
],
offset: limit * page,
limit: limit,
order: [["id", "ASC"]],
})
.then(data => {
res.json(myUtil.response.paging(data, page, limit))
})
.catch(err => {
console.log("Error get all tasks: " + err.message)
res.status(500).send({
message: "An error has occured while retrieving data."
})
})
}