mongodb错误:{“$ err”:“无效的运算符:$ geoWithin”,“code”:10068}

时间:2014-02-06 16:44:30

标签: mongodb geojson

当我尝试使用$ 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

工作正常

1 个答案:

答案 0 :(得分:1)

我认为你的问题是版本本身。检查Mongo是否因为“$ geoIntersects”不存在而抛出语法错误,它已从$ intersects更改为$ geoIntersects所以我会尝试使用以下代码运行相同的代码:

s.find( {shape: {$intersects: {$geometry: BOX}}}, {_id:1})

如果您有旧版本,它将起作用。 $ geoWithin有同样的问题,Mongo找不到它。使用

检查您的版本
version()

我确定这是一个安装问题,我在2.4.7中尝试了这个代码并且它可以工作,它不是旧版本而且我不得不切换到$ intersects