Найти mongodb (в mongoose node.JS) записи, основанные на условии

#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