当我尝试使用$ geoWithin或$ geoIntersects查询几何时我遇到此错误
error: { "$err" : "invalid operator: $geoWithin", "code" : 10068 }
我尝试使用mongo v2.4.9关注this example(在linux mint上,我必须说我无法更新到v2.4.9,所以我手动将/ usr / bin /中的二进制文件替换为从latest release,我之后运行mongod --upgrade)
以下是示例中的代码:
s = db.shapes
s.insert( {_id: "P1", shape: {type: "Point", coordinates: [2,2] } } )
s.insert( {_id: "P2", shape: {type: "Point", coordinates: [3,6] } } )
s.insert( {_id: "Poly1", shape: {type: "Polygon", coordinates: [[ [3,1], [1,2], [5,6], [9,2], [4,3], [3,1] ]] } })
s.insert( {_id: "LS1", shape: {type: "LineString", coordinates: [ [5,2], [7,3], [7,5], [9,4] ] } } )
s.ensureIndex({shape: "2dsphere"})
BOX = {type: "Polygon", coordinates: [[ [0,0], [3,0], [3,3], [0,3], [0,0] ]] }
s.find( {shape: {$geoIntersects: {$geometry: BOX}}}, {_id:1})
然后我有:
error: { "$err" : "invalid operator: $geoIntersects", "code" : 10068 }
或
s.find( { shape : { $geoWithin : { $box : [ [ 0 , 0 ] , [ 100 , 100 ] ] } } } )
然后我有:
error: { "$err" : "invalid operator: $geoWithin", "code" : 10068 }
这在OS X上使用mongo 2.4.3
工作正常答案 0 :(得分:1)
我认为你的问题是版本本身。检查Mongo是否因为“$ geoIntersects”不存在而抛出语法错误,它已从$ intersects更改为$ geoIntersects所以我会尝试使用以下代码运行相同的代码:
s.find( {shape: {$intersects: {$geometry: BOX}}}, {_id:1})
如果您有旧版本,它将起作用。 $ geoWithin有同样的问题,Mongo找不到它。使用
检查您的版本version()
我确定这是一个安装问题,我在2.4.7中尝试了这个代码并且它可以工作,它不是旧版本而且我不得不切换到$ intersects