在$或者内部运行多个geo $ near查询

时间:2014-07-04 12:34:30

标签: mongodb

在查询mongodb数据库时,是否可以在$或语句中执行$ near或$ geoNear等多个地理查询?

我总是收到错误“异常:$或者可能不包含'特殊'查询”

经过一段谷歌搜索后,我发现问题https://jira.mongodb.org/browse/SERVER-3984已关闭并标记为“已修复”。

对我来说,运行多个地理查询时似乎仍然存在错误。 这是我的测试代码:

db.entry.find({
    $or: [
        {
            "address.geo": {
                $near: { 
                    $geometry : {
                       type : "Point" ,
                       coordinates : [ 9.7043 , 52.3019 ] },
                    $maxDistance : 50000 
                }
            }
        },
        {
            "address.geo": {
                $near: { 
                    $geometry : {
                       type : "Point" ,
                       coordinates : [ 9.6043 , 52.1019 ] },
                    $maxDistance : 50000 
                }
            }
        }
    ]
}).count();

结果就是这样:

uncaught exception: count failed: {
    "errmsg" : "exception: $or may not contain 'special' query",
    "code" : 13291,
    "ok" : 0
}

2 个答案:

答案 0 :(得分:4)

您不能在$near子句和$nearSphere子句中使用$or(或$and)。对获取数据执行两个查询

答案 1 :(得分:3)

你不能在$或子句中使用$ near(或$ nearSphere):

  

$或和GeoSpatial查询

     

在版本2.6中更改。

     

$或支持具有以下例外的地理空间子句   near子句(near子句包括$ nearSphere和$ near)。 $或不能   包含near子句和任何其他子句。

但是,您可以在$或中使用其他地理空间条款,因此,如果您可以重构查询以使用其他地理空间运算符,则可以使用$或。