#javascript #mongodb #node.js #geolocation #mongoose
#javascript #mongodb #node.js #геолокация #mongoose
Вопрос:
Я пытаюсь найти некоторые записи в моей базе данных MongoDB на основе значений сохраненной информации о широте и долготе. Я хочу применить следующую функцию с поиском в моей коллекции:
exports.findDistance = findDistance(latitude, longitude) {
console.log('calculating with lat = ' latitude ' and longitude = ' longitude);
var radian = 0.0174532925;
var x = Math.pow(Math.sin((latitude - this.latitude) * radian / 2), 2);
var y = Math.cos(latitude - radian) * Math.cos(this.latitude - radian);
var z = Math.pow(Math.sin((longitude - this.longitude) * radian/2), 2);
var result = 2*3956*Math.asin(Math.sqrt(x y * z));
return result < 10;
}
Эта функция возвращает значение true, когда мой вычисленный результат меньше 10 (я использую информацию о широте и долготе из моей базы данных, на которую ссылается объект ‘this’, и два параметра). Как я могу получить все сообщения из MongoDB, которые относятся к этой функции?
Я попробовал следующее:
exports.index = function(req, res) {
var latitude = value1;
var longitude = value2;
Message.find(Message.findDistance, [], function(err, msgs) {
// render the page
});
}
Однако моя функция findDistance, похоже, не вызывается функцией поиска mongoose (в моей консоли разработчика не видно выходных данных, и я просто получаю все результаты, возвращаемые из моей коллекции MongoDB). Кроме того, как я могу передать параметры широты и долготы в функцию findDistance?
Моя схема сообщений выглядит следующим образом:
Message = new Schema({
text: { type: String, required: true },
parent: String,
user: ObjectId,
latitude: Number,
longitude: Number,
date: { type: Date, default: Date.now }
});
Кто-нибудь может мне помочь? 🙂
Ответ №1:
Ваша функция findDistance должна быть определена в MongoDB, а не в node.js, чтобы у него был доступ к полям базы данных при запуске. К счастью, MongoDB использует JavaScript для своих хранимых процедур, поэтому функция должна работать.
Смотрите здесь инструкции по хранению и использованию хранимых процедур MongoDB.
Ответ №2:
Это эквивалентно хранимой процедуре, но не то же самое. И рекомендуется избегать использования хранимой функции MongoDB.
Для получения дополнительной информации: http://docs.mongodb.org/manual/applications/server-side-javascript