如何用Mongoose执行runCommand?

jsi*_*oes 14 mongoose mongodb node.js

我正在使用Node.js和Mongoose来访问我的MongoDB.我正在使用一个存储一些地理坐标的模型.我把它们编入索引,一切似乎按预期工作.我想要做的是从我的请求中检索最接近的东西.在MongoDB控制台上,我做了类似这样的事情:

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

但是,我不确定如何使用Mongoose.以下是有关我尝试使用的命令的更多信息:http://www.mongodb.org/display/DOCS/Geospatial+Indexing

谢谢,何塞

Tim*_*imm 5

首先,还没有一个方便的包装器可以直接使用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;
  }
});
Run Code Online (Sandbox Code Playgroud)

请参阅文档以了解正确的错误处理以及如何计算距离.


nee*_*ebz 0

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

db.places.find( { location : { $near : [50,50] , $maxDistance : 300 } } )
Run Code Online (Sandbox Code Playgroud)