2013-03-21 2 views
8

mongodbは、地理空間クエリの2つの同様の機能 - $near$geoNearを提供しているようです。 mongoのドキュメントによると、mongodb geoNear vs near

geoNearコマンドは、$ near演算子に代わるものです。 $ nearの機能に加えて、 では、geoNearは 診断情報を返します。

geoNearは、near機能のスーパーセットを提供しているようです。たとえば、nearは最も近い100のドキュメントのみを返しますが、geoNearでは最大を指定できます。 geoNearの代わりにnearを使用する理由はありますか?他のものより効率的ですか?

答えて

15

どちらの効率も同じである必要があります。

geoNearの主な制限は、一致したすべてのドキュメントが1つの結果ドキュメントに返されるため、コマンドとして最大ドキュメントサイズまでの結果セットを返すことができることです。また、各結果ドキュメントに距離フィールドを追加する必要があります。距離フィールドは、使用状況に応じて問題となる場合もあれば、問題でない場合もあります。

$nearはクエリ演算子なので、結果は単一のドキュメントよりも大きくなる可能性があります(単一のドキュメントではなく、単一の応答で返されます)。また、クエリのlimit()を使用してドキュメントの最大数を設定することもできます。

コマンドからdiagnostics(距離や位置が一致するなど)が必要な場合を除き、ユーザーは$nearを使用することをおすすめします。

+0

ご清聴ありがとうございます。わかりにくい点の1つは、近くのドキュメントは100ドキュメントを返すと言っていますが、mongo 2.4のテストではそれはそうではないようです。制限を使用しない限り、すべての文書を返すようです。あなたはその行動がどんなものであるべきかを知っていますか? –

+0

短い答え:いいえ私は期待される2.4の振る舞いがわからない。このJiraチケット(https://jira.mongodb。org/browse/SERVER-5236)、それらはまだ$ nearクエリからの "プログレッシブ"結果を修正していないので、ある時点で停止します。あなたが見ているかもしれないのは、最初のバッチでできるだけ多くの結果を返すクエリですが、最終的にそのバッチのサイズを使い果たしてしまいます。ロブ。 –

+0

少なくとも100に限定されているようには思えませんでした。助けてくれてありがとう。 –

1

100個の文書がGeoNearを制限するには、デフォルトの動作ですが、MongoDBのドキュメントに記載されているように、あなただけの(http://docs.mongodb.org/manual/reference/command/geoNear/NUMフィールドを設定することができます

デフォルトは100に設定されていますが、より多くを設定することができます。残念ながらこれらは大きな違いです(https://jira.mongodb.org/browse/SERVER-3925を参照)パラメータは一瞬 のために不足している

+0

私は100近くもデフォルトを考えましたが、それはそうではないようです –

1

をスキップ: -

  1. $ geoNearもポイントからあなたの距離を与えるが、コマンドの近くに$はしていません。

  2. $ geoNearコマンドでは、コレクションに2dインデックスおよび/または2dsphereインデックスが1つのみ存在する必要がありますが、$ nearおよび$ geoWithinなどのジオスペースクエリ演算子では、コレクションに複数のジオスペースインデックスがあります。 これは、$ geoNearコマンドで検索するフィールドを指定するオプションがないためです。$ nearコマンドのようにフィールド名を指定できるからです。