我想使用geoNear返回具有经度和纬度坐标的集合中的文档,但即使集合中有经度和纬度坐标的文档也没有得到任何结果。我正在使用mlab来存储我的数据,例如,这里是我的集合中的一个文档。geoNear没有返回任何结果
var trucker = db.collection('trucker');
{
"_id": {
"$oid": "581e82d00f192a694bb56679"
},
"latitude": 77.0551642746301,
"longitude": 10.825842664395019,
"loc": [
77.0551642746301,
10.825842664395019
],
}
我有两种不同的方式的坐标,因为我想看看geoNear便拿起位置,并返回结果,但仍无法找到它。这是我如何使用geoNear目前,发现的结果
exports.geoNear = function (lat, lon ,res, next)
{
console.log("Inside geoNear");
var job = {};
job.lon = JSON.parse(lon);
job.lat = JSON.parse(lat);
console.log(job.lon);
console.log(job.lat);
trucker.geoNear([job.lon, job.lat], function(err, success){
if(success) {
res(success);
} else {
console.log('Response error' + err);
}
});
};
app.get('/geoFind', function(req, res) {
AM.geoNear('48.99759239999999', '-123.0683089', function(o){
res.send(200,o);
});
});
我得到这个结果访问本地主机时:8000/geoFind:
{
"waitedMS": 0,
"results": [],
"stats": {
"nscanned": 0,
"objectsLoaded": 0,
"maxDistance": 0,
"time": 0
},
"ok": 1
}
现在,我已经尝试了许多不同的方法,如下面却得到,响应errorMongoError:“近”字段必须用点以下:
trucker.createIndex({ loc : "2dsphere" })
trucker.geoNear({loc: {type: "Point", coordinates: [job.lon,job.lat]}}, {spherical: true}, function(err, success) {
if(success){
res(success);
} else {
console.log('Response error '+err + job.lon +':' + job.lat);
}
});
现在,我不知道如何使用geoNear返回与纬度和经度坐标文件inates?经度和纬度是否需要以特定的方式存储在数据库中?我尝试了db.command()以及geoNear,并且我总是获取db.command不是一个函数,与trucker.command或trucker.db.db.command或trucker.db.command相同(任何命令都可以从数据库中获取数据数据库,我认为是因为我使用猫鼬不mongoclient,因为我的数据库它与mlab设置)。我已经尝试过没有任何工作,这就是为什么我现在问这个问题,因为我已经尝试了几乎所有可以想象的方式来使用geoNear从我的数据库中获取结果。
MongoDB的地理空间坐标需要被存储为[长, lat],看起来像你正在做[lat,long] - 可能是问题的根源? – pneumee
是的,我没有[long,lat]格式,但我确实尝试过,但仍然没有得到任何结果。不过谢谢你的回答,因为它让我做了更多的测试,然后让geoNear最终返回一些东西! –