私はJavaのシステムに取り組んでおり、その一部は内部表現からMongoDbクエリに式をレンダリングします。「OR」式をレンダリングするのと同じ方法で「AND」式をレンダリングします。したがって、「category ='GIBBLY' AND active = true」のような式がある場合、次のようにレンダリングされます。
{$and:[{"category":"GIBBLY"},{"active":true}]}
この場合、これは必ずしも必要ではないことを理解しています。私が理解できないのは、$ andが必要な場合があるかどうかです(私のシステムでは、それが何か違いを生む場合、ネストされたANDとORがしばしばあります)。
これが私にとって問題である理由は、$and演算子が地理空間クエリで失敗するように見えるためです。このようなクエリ:
{"$and":[{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}}, {"active":true}]}
「特別なインデックスが見つかりません:2d」エラーで失敗します。次のようにクエリをやり直すと、次のようになります。
{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}, "active":true}
それはうまくいきます。
いくつかの調査を試みたところ、mongodb-userグループでこの問題の議論が見つかりました。これは、地理空間クエリの複合インデックスの議論に言及しています。
私が見つけた情報のどれも、なぜ正確に$andが地理空間クエリで機能しないのかを実際に説明していません。データベースに複合インデックスがまったく定義されておらず、$ and以外のクエリが機能するため、$andがインデックスに関してどのように異なるかがわかりません。
要約すると、私の質問は次のとおりです。
$ andは必要ですか?もしそうなら、どのような場合に?
$ andは、インデックスに関して暗黙の表現と基本的に異なりますか?
$ andが地理空間クエリで機能しないのはなぜですか?