mongo 2.6.4 中的多个 $near 不起作用

Igo*_*oks 3 json geolocation mongodb mongodb-query

我有这样的文档集合:

{
  ...
  "CurrentLocation" : {
    "type" : "Point",
    "coordinates" : [ 
        -92.48436693078111, 
        35.85223020932276
    ]
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我需要使用两个可能的中心点进行“$near”查询:

db.Truck.find({
    "$or": [{
        "DestinationLocation": {
            "$near": {
                "$geometry": {
                    "type": "Point",
                    "coordinates": [-117.256875, 41.856405]
                },
                "$maxDistance": 100000.0
            }
        }
    }, {
        "DestinationLocation": {
            "$near": {
                "$geometry": {
                    "type": "Point",
                    "coordinates": [-112.256875, 40.856405]
                },
                "$maxDistance": 100000.0
            }
        }
    }]
})
Run Code Online (Sandbox Code Playgroud)

Mongo 返回一个错误:

error:
{
"$err" : "Can't canonicalize query: BadValue Too many geoNear expressions",
"code" : 17287
}
Run Code Online (Sandbox Code Playgroud)

除了应用程序端的数据联合之外,还有什么方法可以用两点请求 $near 吗?谢谢。

anh*_*hlc 6

Mongo DB 只接受一个 NEAR。如果有一个 NEAR,它必须是根或者根必须是一个 AND 并且它的子节点必须是一个 NEAR。见https://github.com/mongodb/mongo/blob/master/src/mongo/db/query/canonical_query.cpp#L364

如果您需要$or使用两个操作$near,请尝试进行两个查询并整合它们的结果。