如何用Mongoose执行runCommand?

时间:2011-05-02 18:52:12

标签: mongodb node.js 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

谢谢, 何

4 个答案:

答案 0 :(得分:5)

首先,还没有一个方便的包装器可以直接使用geoNear和Mongoose(假设您想要读取计算的距离)。

但是,由于来自原生proxies all collection methods的Mongoose系列MongoDB native driver你可以使用他们的geoNear method,但你必须放弃一些方便,你可能会期望从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;
  }
});

请参阅文档以获取正确的错误处理和how to calculate the distances

答案 1 :(得分:1)

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 version v2.0.2

它有点hacky并且可以改变。

答案 2 :(得分:0)

我认为Mongoose现在不支持runCommand。您最好使用find方法使用地理空间选项,例如>

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

答案 3 :(得分:0)

希望这应该工作!!参考网址: 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);
});