Как выполнить runCommand с Mongoose?

Я использую 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

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

Ответы

Ответ 1

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

Но так как коллекции Mongoose проксирует все методы сбора из родного MongoDB native драйвера вы можете просто использовать метод 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;
  }
});

Обратитесь к документам за правильной обработкой ошибок и как рассчитать расстояния.

Ответ 2

YourModel.db.db.executeDbCommand({geoNear : "locations", near : [11.252,14.141], spherical: true }, function(err,res) { console.log(res.documents[0].results)});

node 0.6.6, [email protected], версия mongodb v2.0.2

его немного взломать и может измениться.

Ответ 3

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

db.places.find( { location : { $near : [50,50] , $maxDistance : 300 } } )

Ответ 4

Надеюсь, это сработает! 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);
});