我正在研究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