Найти записи mongodb (в mongoose + node.JS) на основе условия - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь найти некоторые записи в моей базе данных 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 }
});

Может ли кто-нибудь мне помочь?:)

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Ваша функция findDistance должна быть определена в MongoDB, а не в node.js, чтобы иметь доступ к полям базы данных при запуске.К счастью, MongoDB использует JavaScript для своих хранимых процедур, поэтому функция должна работать.

См. здесь для инструкций по хранению и использованию хранимых процедур MongoDB.

0 голосов
/ 10 января 2013

Это эквивалентно хранимой процедуре, но не то же самое. И рекомендуется избегать использования хранимой функции MongoDB.

Для получения дополнительной информации: http://docs.mongodb.org/manual/applications/server-side-javascript/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...