我在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",
答案 0 :(得分:3)
以下是2dsphere indexes上与此相关的手册页的除外:
2dsphere 索引支持存储为GeoJSON对象和传统坐标对的数据(另请参阅2dsphere索引字段限制)。对于传统坐标对,索引将数据转换为GeoJSON Point。有关支持的GeoJSON对象的详细信息,请参阅GeoJSON对象。
因此,当引用传统坐标结构时,其中的两个主要词是" pair" ,其中可以是一个数组或一组经度和关键值纬度。另一个关键词是" Point" ,其中是遗留坐标对的存储方式。事实上,只有曾 " Point" 对象。
您的数据包含GeoJSON格式和" Polygon" ,这最终意味着您要在错误的位置"中编入索引。请改用GeoJSON的根目录:
db.s.createIndex({"shape" : "2dsphere"});
然后创建索引并按设计工作。
此外,我建议您不要在索引上使用其他设置,直到您对它们的工作方式更加熟悉。启动并运行一些查询,然后更改设置并观察效果。