Mongo 3.0.5 - 无法在多边形上创建索引

时间:2015-08-17 19:41:39

标签: mongodb indexing geospatial

我在Mongo 3.0.5的集合中创建了这个文档

db.s.insert( {_id: "Poly1", shape: {type: "Polygon", coordinates: [[ [3,1], [1,2], [5,6], [9,2], [4,3], [3,1] ]] } })

然后我尝试在其上创建一个2dshere索引

db.s.createIndex({"shape.coordinates" : "2dsphere"}, {bits:26});

然后给我这个错误

 "errmsg" : "exception: Can't extract geo keys: { _id: \"Poly1\", shape: { type: \"Polygon\", coordinates: [ [ [ 3.0, 1.0 ], [ 1.0, 2.0 ], [ 5.0, 6.0 ], [ 9.0, 2.0 ], [ 4.0, 3.0 ], [ 3.0, 1.0 ] ] ] } }  Point must only contain numeric elements",

1 个答案:

答案 0 :(得分:3)

以下是2dsphere indexes上与此相关的手册页的除外:

  

2dsphere 索引支持存储为GeoJSON对象和传统坐标对的数据(另请参阅2dsphere索引字段限制)。对于传统坐标对,索引将数据转换为GeoJSON Point。有关支持的GeoJSON对象的详细信息,请参阅GeoJSON对象。

因此,当引用传统坐标结构时,其中的两个主要词是" pair" ,其中可以是一个数组或一组经度和关键值纬度。另一个关键词是" Point" ,其中是遗留坐标对的存储方式。事实上,只有 " Point" 对象。

您的数据包含GeoJSON格式和" Polygon" ,这最终意味着您要在错误的位置"中编入索引。请改用GeoJSON的根目录:

db.s.createIndex({"shape" : "2dsphere"});

然后创建索引并按设计工作。

此外,我建议您不要在索引上使用其他设置,直到您对它们的工作方式更加熟悉。启动并运行一些查询,然后更改设置并观察效果。