2

イベントという名前のコレクションがあります。

Events コレクションの各ドキュメントには、緯度経度のソースと宛先があります。

Events コレクションに対してクエリを実行し、ソースから一定の距離内にあり、宛先から一定の距離内にあるイベントのみを取得したいと考えています。

MongoDB は 1 つのコレクションで 2 つの地理空間インデックスをサポートしていないことを読みました。

データモデルがどのように見えるべきか、目的を達成するためにクエリを作成するにはどうすればよいかについて、私は混乱しています。

ありがとう

4

2 に答える 2

1

現時点では、コレクションごとに地理空間インデックスを 1 つだけ持つことができます。MongoDB では複数のインデックスを作成できますが、この動作はサポートされていません。MongoDB は単一のクエリをサポートするために 1 つのインデックスしか使用できないため、ほとんどの場合、複数の geo インデックスを使用すると望ましくない動作が発生します。

JIRA には、投票したくなるチケットがいくつかあります。

https://jira.mongodb.org/browse/SERVER-2331

https://jira.mongodb.org/browse/SERVER-3653

于 2013-08-17T04:34:50.773 に答える
1

地理インデックスの制限に対処する必要があるため、いくつかのオプションが残されています。1 つは、2 つのコレクションを作成して 2 つのクエリを実行し、交差をアプリケーション レベルで解決することです。これは、あなたが何をしているかによっては高価になる可能性があります。

もう 1 つのシナリオは、1 つのコレクションで作業することですが、クエリを変更して、ソースと目的地の周囲の領域の交差領域を表すジオメトリ内の $geo を確認します。送信元と送信先の両方からある程度の距離内にあるイベントをクエリしているため、これは交差領域があることを意味します。交差ジオメトリを計算するのはユーザー次第です。可能であれば、これらの交点を事前に計算して保存できます。

于 2013-08-17T06:50:14.667 に答える