3

最近、MongoDB をバージョン 2.2.1 からバージョン 2.4.6 に、pymongo を 2.6.2 にアップグレードしました。

アップグレードの理由の 1 つは、ここで説明されているように、MongoDB の新しいバージョンが地理空間クエリの中心からのドキュメント (適切な座標を含む) の距離を計算して返す機能です。

これまでのところ、次のクエリを実行します。

db.collection.find({"loc": {"$within": {"$center": [[LON, LAT], RADIUS]}}})

ここで、LON、LAT、および Radius は適切な数値です。次に、返された各ドキュメントの中心からの距離をプログラムで計算します。

私のコードと比較して効率が高いため、MongoDB で距離計算を実行しようとしています。

私が今試しているのは次のとおりです。

db.collection.find({"loc": {"$geoWithin": {"$centerSphere": [[LON, LAT], RADIUS]}}})

ここで、RADIUS は適切に計算されるようになりました (半径は km / 6371) が、以前のクエリと同じ結果が得られます。

返されるドキュメントごとに追加のフィールド「dis」を返すには、新しいクエリをどのように変更すればよいですか?

地理空間インデックスは 2D であり、ドキュメントに従って動作するはずですが、必要に応じて 2dsphere に変更できます。誰か良い提案はありますか?

4

1 に答える 1

3

集計フレームワークで $geoNear コマンドを使用してみてください。$geoNear のドキュメントは次のとおりです。

http://docs.mongodb.org/manual/reference/aggregation/geoNear/

クエリは次のようになります。

db.collection.aggregate([{$geoNear:{near:[LON,LAT],distanceField:"distance",maxDistance:RADIUS,spherical:true}}])

結果のドキュメントには、計算された値を含む「距離」という名前のフィールドがあります。それが役立つことを願っています。

于 2013-09-23T18:17:54.453 に答える