2015-08-17 31 views
1

創建索引我在集合中創建了蒙戈本文件3.0.5蒙戈3.0.5 - 不能在多邊形

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

然後我嘗試在它

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

創建2dshere指數,然後給我這個錯誤

"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", 

回答

3

這裏是除了從手冊p在2dsphere indexes年齡是與此有關:

2dsphere索引支持存儲爲GeoJSON的對象數據和傳統座標對(參見2dsphere索引字段限制)。對於傳統座標對,索引將數據轉換爲GeoJSON Point。有關支持的GeoJSON對象的詳細信息,請參閱GeoJSON對象。

所以在兩個主要詞有「配對」參照遺留座標結構,其中可以是陣列或一組爲經度和緯度的鍵值時。另一個關鍵字是「點」,其中是如何存儲傳統座標對。實際上這種形式只有 a 「點」對象。

您的數據包含一個GeoJSON格式和一個「多邊形」,這最終意味着您在「錯誤的地方」編制索引。改爲使用GeoJSON的根:

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

然後索引被創建並按照設計工作。

此外,我建議不要在索引上播放其他設置,除非您對這裏的工作方式更熟悉。獲取並運行一些查詢,然後更改設置並觀察效果。