【发布时间】:2017-03-19 22:28:59
【问题描述】:
我正在尝试使用 geoNear 返回我的集合中具有纬度和经度坐标的文档,但即使集合中有具有纬度和经度坐标的文档也没有得到任何结果。我正在使用 mlab 来存储我的数据,例如,这是我收藏中的一个文档。
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);
});
});
我在访问 localhost:8000/geoFind: 时得到这个结果:
{
"waitedMS": 0,
"results": [],
"stats": {
"nscanned": 0,
"objectsLoaded": 0,
"maxDistance": 0,
"time": 0
},
"ok": 1
}
现在,我尝试了许多不同的方法,例如以下但得到,Response errorMongoError: 'near' field must be point with the following:
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 返回具有纬度和经度坐标的文档?经纬度是否需要以特定方式存储在数据库中?我也用 geoNear 尝试了 db.command() 并且我总是得到 db.command 不是一个函数,与 trucker.command 或 trucker.db.db.command 或 trucker.db.command 相同(任何有命令从中获取数据的东西我认为的数据库是因为我使用的是 mongoose 而不是 mongoclient,因为我的数据库是用 mlab 设置的)。我尝试过的任何方法都没有奏效,这就是为什么我现在问这个问题的原因,因为我已经尝试了几乎所有可以想象的方式来使用 geoNear 从我的数据库中获取结果。
【问题讨论】:
-
MongoDB 地理空间坐标需要存储为 [long, lat],看起来你正在做 [lat, long] - 可能是问题的根源?
-
是的,我没有它 [long, lat] 格式,但我确实尝试过这个,但仍然没有得到任何结果。不过感谢您的回答,因为它让我进行了更多测试,然后让 geoNear 终于返回了一些东西!
标签: node.js mongodb mongoose mlab