いくつかの仮定:-
1。場所に基づいて一致する300のレコードがあると想定します。
2。 100件の結果の最初のセットにタグピザがないと仮定します。残りの200のドキュメント(101から300)にはタグピザがあります
クエリ1:-
- 2つのパイプライン操作$geoNearと$matchがあります
- $ geoNearパイプライン操作の出力は、$matchpipeline操作への入力です
- $ geoNearは、最も近い距離から遠い距離で並べ替えられた場所に基づいて、最大100件の結果(指定した制限)を検索します。 (ここで、取得された100件の結果は純粋に場所に基づいていることに注意してください。したがって、これらの100件の結果には、タグ「pizza」の付いたドキュメントは含まれていません)
- これらの100個の結果は、フィルタリングが行われる次のパイプライン操作$matchに送信されます。しかし、100件の結果の最初のセットにはタグピザがなかったため、出力は空です
クエリ2:-
- パイプライン操作は1つだけです$geoNear
- $geoNearパイプライン操作に含まれるクエリフィールドがあります$geoNearは、最も近い距離とquerytag =pizzaで並べ替えられた場所に基づいて、最大100件の結果(指定した制限)を検出します
- ここで、クエリがパイプライン操作$ geoNearに含まれているため、101から200までの結果が出力として返されます。つまり、単純な文で、場所が[x、y] withtag=pizzaのすべてのドキュメントを検索します。
追伸:-$ groupパイプラインステージは、カウントを取得するためだけに追加されているため、説明には記載されていません