我使用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
谢谢, 何
答案 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);
});