Как выполнить runCommand с Mongoose? - PullRequest
14 голосов
/ 02 мая 2011

Я использую Node.js и Mongoose для доступа к моей MongoDB. Я использую модель, которая хранит некоторые географические координаты. Я их проиндексировал, и все, кажется, работает как ожидалось. То, что я пытаюсь сделать, это извлечь самые близкие вещи из моего запроса. На консоли MongoDB я делаю что-то вроде этого:

distances = db.runCommand({ geoNear : "deals", near : [11.252, 14.141], spherical : true, maxDistance : 300  }).results 

Однако я не уверен, как это сделать с Mongoose. Вот дополнительная информация о команде, которую я пытаюсь использовать: http://www.mongodb.org/display/DOCS/Geospatial+Indexing

Спасибо, Хосе

Ответы [ 4 ]

5 голосов
/ 06 августа 2012

Прежде всего, еще нет удобной оболочки для непосредственного использования geoNear с Mongoose (учитывая, что вы хотите прочитать рассчитанное расстояние).

Но поскольку коллекции Mongoose проксируют все методы сбора из нативного нативного драйвера MongoDB вы можете просто использовать их метод geoNear , хотя вам придется отказаться от удобства, которое можно ожидать от Mongoose, и в моих выводах обработка ошибокбыло немного по-другому.

В любом случае, вот как вы могли бы использовать указанный API:

YourModel.collection.geoNear(lon, lat, {spherical: true, maxDistance: d}, function(err, docs) {
  if (docs.results.length == 1) {
    var distance = docs.results[0].dis;
    var match = docs.results[0].obj;
  }
});

Пожалуйста, обратитесь к документации для правильной обработки ошибок и , как рассчитать расстояния.

1 голос
/ 16 января 2012
YourModel.db.db.executeDbCommand({geoNear : "locations", near : [11.252,14.141], spherical: true }, function(err,res) { console.log(res.documents[0].results)});

узел 0.6.6, mongoose@2.4.9, версия mongodb v2.0.2

Это немного странно и может измениться.

0 голосов
/ 28 ноября 2016

Надеюсь, это должно работать! Ссылочный URL: http://mongoosejs.com/docs/api.html

// Очки наследия

Model.geoNear([1,3], { maxDistance : 5, spherical : true }, function(err, results, stats) {
   console.log(results);
});

// geoJson

var point = { type : "Point", coordinates : [9,9] };
Model.geoNear(point, { maxDistance : 5, spherical : true }, function(err, results, stats) {
   console.log(results);
});
0 голосов
/ 02 мая 2011

Я не думаю, что Mongoose поддерживает runCommand прямо сейчас. Вам лучше использовать геопространственные параметры, используя метод find, например. >

db.places.find( { location : { $near : [50,50] , $maxDistance : 300 } } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...