我正在开发一个 Java 系统,其中一部分将表达式从内部表示形式呈现为 MongoDb 查询。我渲染“AND”表达式的方式与渲染“OR”表达式的方式相同。因此,如果我有一个像“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 不能用于地理空间查询?