2012-10-28 40 views
1

我想查询针对蒙戈-dB的地理空间索引(本教程http://www.mongodb.org/display/DOCS/Geospatial+Indexing后设计的)失败。针对与maxDistance地理空间索引查询的MongoDB Node.js的从客户

所以,当我从壳一切执行此工作正常:

db.sellingpoints.find(({ location : { $near: [48.190120, 16.270895], $maxDistance: 7/111.2 } }); 

但是从我的应用程序的NodeJS(使用mongoskin或猫鼬)相同的查询,直到我设定的距离 - 将不会返回任何结果值为非常高的数字(5690)

db.collection('sellingpoints') 
.find({ location: { $near: [lat,lng], $maxDistance: distance/111.2} }) 
.limit(limit) 
.toArray(callback); 

有没有人有任何想法如何解决这个问题?

+0

你尝试过同样的查询,但具有恒定的替换距离/ X计算(排除语法相关的问题)? –

+0

当我设置$ maxDistance为一定值(例如$ maxDistance:0.0629496402877697841726618705036)我没有得到任何结果 – SakeSushiBig

+0

你确定你的纬度,经度被设置为纠正应用程序的NodeJS值? –

回答

0

我只是想对一些地理定位数据的简单节点猫鼬脚本。我正在使用来自http://dev.maxmind.com/geoip/geolite的城市地理数据,将它们全部加载到mongodb中。 我写了一个小测试代码(https://github.com/nleite/mongoose_test)。

var mongoose = require('mongoose'); 
var db = mongoose.createConnection('localhost', 'geo'); 

var schema = mongoose.Schema({ city: 'string', loc: 'array', areaCode: 'string', country:  'string', region: 'string', locId: 'string', metroCode: 'string', postalCode: 'string'}); 

var City = db.model('City', schema); 
var distance = 7/111.2; 
console.log('Distance %s', distance); 
var query = City.find({ 'loc': { $near: [48.190120, 16.270895], $maxDistance: distance  }}); 
query.exec(function(err, city){ 
    if (err) return handleError(err); 
    console.log('Found you %s' , city); 
    process.exit(-1); 
}); 

它似乎工作得很好。我甚至花了你的查询来检查它是否有任何问题,但似乎工作正常。

能否请您给作为架构的详细信息,并为你的预期不工作的查询?

+0

工作时,您好,感谢您的帮助, 问题是它有没有指定的最小/最大的索引(ENV问题的配置是一样的) – SakeSushiBig

2

所有蒙戈地理查询应在格式(长,LAT)和NOT(纬度,经度)。 你可以尝试这种格式。

PS:你需要确保数据插入(长,LAT)格式,以及查询中也(长,LAT)格式

相关问题