我正在研究Java中的系統,其中的一部分將表達式從內部表示呈現到MongoDb查詢。我呈現「AND」表達式的方式與呈現「OR」表達式的方式相同。
{$and:[{"category":"GIBBLY"},{"active":true}]}
我明白,這不是絕對必要在這種情況下:如果我有一個像「一類=‘GIBBLY’和積極=真實」的表達,將它作爲渲染。我無法弄清楚是否有有這種情況下,$和是必要的(在我的系統中,如果有區別的話,通常會有嵌套的AND和OR)。
這對我來說是個問題,原因是$和operator對於地理空間查詢似乎失敗了。像這樣的查詢:
{"$and":[{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}}, {"active":true}]}
失敗,出現「無法找到特殊的索引:2D」的錯誤。如果我重新做查詢爲:
{"loc":{"$nearSphere":[-79.75 , 43.5], "$maxDistance":0.00156787}, "active":true}
它工作正常。
我試圖做一些研究,並發現討論的問題on the mongodb-user group,其中討論了compound indexes in geospatial queries。
我發現的任何信息都不能解釋爲什麼正好是$,並且不適用於地理空間查詢。我的數據庫中沒有定義任何複合索引,非$和查詢都可以工作,所以我不確定$和$在索引方面的工作方式不同。
總之,我的問題是:
爲$和以往任何時候都需要的,如果是這樣,在什麼樣的情況下?
是否$並且在某些基本方面與隱式表示方式在索引方面有所不同?
爲什麼$和不適用於地理空間查詢?
如果$ nearSphere是$和?中唯一的條件,它會發生錯誤嗎? – MrKurt 2012-07-19 16:03:32
https://jira.mongodb.org/browse/SERVER-4572。我也找不到任何評論。 – pingw33n 2012-07-19 16:05:57
是 - 如果$ nearSphere是唯一的條件,則會出現相同的錯誤。 – dkilmer 2012-07-19 16:23:02