1

mongo-db の地理空間インデックスに対してクエリを実行したい (このチュートリアルhttp://www.mongodb.org/display/DOCS/Geospatial+Indexingの後に設計された)。

したがって、シェルからこれを実行すると、すべて正常に動作します。

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

しかし、nodejs アプリケーションからの同じクエリ (mongoskin または mongoose を使用) は、距離値を非常に高い数値 (5690) に設定するまで結果を返しません。

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

誰かがそれを修正する方法を知っていますか?

4

2 に答える 2

2

すべてのmongogeoクエリは、(long、lat)の形式であり、(lat、long)ではない形式である必要があります。そのフォーマットで試してみてください。

PS:データが(long、lat)形式で挿入されていることと、クエリも(long、lat)形式で挿入されていることを確認する必要があります

于 2012-11-04T16:58:43.740 に答える
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);
}); 

それはかなりうまくいっているようです。問題があるかどうかを確認するためにクエリを実行しましたが、問題なく動作しているようです。

期待どおりに動作していないスキーマとクエリに関する詳細情報を教えてください。

于 2012-11-05T12:12:10.017 に答える