MongoDb $和具有地理空间查询的运算符

dki*_*mer 5 java mongodb

我正在使用Java系统,其中一部分将表达式从内部表示呈现到MongoDb查询.我渲染"AND"表达式的方式与呈现"OR"表达式的方式相同.因此,如果我有一个类似"category ='GIBBLY'和active = true"的表达式,它将呈现为:

{$and:[{"category":"GIBBLY"},{"active":true}]}

我知道在这种情况下这不是绝对必要的.我想不通的是,是否有其中$的情况下,是必要的(在我的系统中,经常被嵌套AND和OR,如果说有什么区别).

这对我来说是一个问题的原因是$和运算符似乎无法进行地理空间查询.像这样的查询:

{"$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组中找到了对该问题的讨论,该讨论了地理空间查询中复合索引.

我找到的所有信息都没有真正解释为什么确切地说$并且不适用于地理空间查询.我的数据库中根本没有定义复合索引,非$和查询工作,所以我不确定$和索引的工作方式不同.

总结一下,我的问题是:

  1. 是和必要的,如果是的话,在什么样的情况下?

  2. $和与索引的隐式表示有某些基本方式不同吗?

  3. 为什么$和$并不适用于地理空间查询?