从node.js客户端对具有maxDistance的地理空间索引进行MongoDB查询失败

时间:2012-10-28 11:06:41

标签: node.js mongodb indexing geospatial mongoskin

我想查询mongo-db中的地理空间索引(在本教程http://www.mongodb.org/display/DOCS/Geospatial+Indexing之后设计)。

所以当我从shell执行它时一切正常:

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

但是我的nodejs应用程序中的相同查询(使用mongoskin或mongoose)将不会返回任何结果,直到我将distance-value设置为一个非常高的数字(5690)

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

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

所有mongo geo查询的格式应为(long,lat)和NOT(lat,long)。 你能尝试那种格式。

PS:您需要确保以(long,lat)格式插入数据以及以(long,lat)格式查询

答案 1 :(得分:0)

我刚尝试了一个针对某些地理定位数据的简单节点mongoose脚本。我正在使用来自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);
}); 

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

是否可以提供有关Schema和Query的更多信息,这些信息无法按预期工作?