Как выполнить 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

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


person jsimoes    schedule 02.05.2011    source источник


Ответы (4)


Во-первых, еще нет удобной оболочки для прямого использования 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;
  }
});

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

person Timm    schedule 06.08.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, мангуст @ 2.4.9, версия mongodb v2.0.2

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

person keza    schedule 16.01.2012
comment
Это больше не работает в 3.6x. Просматривая документы API, я не вижу ничего похожего. Вы знаете другой способ добиться этого? - person occasl; 26.04.2013
comment
YourModel.db.db.command({geoNear: местоположения, рядом: [11.252,14.141], сферический: true}, function(err,res) { console.log(res.documents[0].results)}); - person Carasel; 12.05.2016

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

db.places.find( { location : { $near : [50,50] , $maxDistance : 300 } } )
person neebz    schedule 02.05.2011
comment
Но это не возвращает мне ту дистанцию, которую я хотел бы иметь! Любые идеи? - person jsimoes; 06.05.2011

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

// Устаревшая точка

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

// геоДжсон

var point = { type : "Point", coordinates : [9,9] };
Model.geoNear(point, { maxDistance : 5, spherical : true }, function(err, results, stats) {
   console.log(results);
});
person Raghuraman Kesavan    schedule 28.11.2016