I have a database containing way segments from OpenStreetMap stored as an array of GeoJSON LineString objects:
> db.ways.findOne({}, { segments: true}) { "segments" : [ { "type" : "LineString", "coordinates" : [ [ 7.2228032, 50.8051785 ], [ 7.2226525, 50.8054414 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2226525, 50.8054414 ], [ 7.2224028, 50.805692 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2224028, 50.805692 ], [ 7.2217995, 50.8062804 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2217995, 50.8062804 ], [ 7.2215501, 50.8065347 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2215501, 50.8065347 ], [ 7.2210556, 50.8070833 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2210556, 50.8070833 ], [ 7.2208635, 50.8074685 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2208635, 50.8074685 ], [ 7.2200495, 50.8082661 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2200495, 50.8082661 ], [ 7.2200803, 50.8084219 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2200803, 50.8084219 ], [ 7.2201153, 50.808599 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2201153, 50.808599 ], [ 7.2200909, 50.8087172 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2200909, 50.8087172 ], [ 7.2198782, 50.8088329 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2198782, 50.8088329 ], [ 7.218674, 50.8100349 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.218674, 50.8100349 ], [ 7.2179697, 50.8103464 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2179697, 50.8103464 ], [ 7.2176172, 50.8104984 ] ] }, { "type" : "LineString", "coordinates" : [ [ 7.2176172, 50.8104984 ], [ 7.2168889, 50.8111111 ] ] } ], "_id" : ObjectId("52a086fe2308d1ac1e000001") }
Trying to create a 2dsphere index throws the following error:
> db.ways.ensureIndex({segments : "2dsphere"}) { "err" : "Can't extract geo keys from object, malformed geometry?: { tags: { highway: \"service\", service: \"parking_aisle\" }, nodeRefs: [ \"270524743\", \"1633119639\", \"1633119637\", \"1633119640\", \"1633119638\", \"510854\", \"510855\", \"11766986\", \"1744718756\", \"11766983\", \"1744718765\", \"11766978\", \"11766975\", \"510863\", \"510864\", \"510865\" ], id: \"4008272\", nodes: [ { tags: {}, id: \"270524743\", lat: 50.8051785, lon: 7.2228032 }, { tags: {}, id: \"1633119639\", lat: 50.8054414, lon: 7.2226525 }, { tags: {}, id: \"1633119637\", lat: 50.805692, lon: 7.2224028 }, { tags: {}, id: \"1633119640\", lat: 50.8062804, lon: 7.2217995 }, { tags: {}, id: \"1633119638\", lat: 50.8065347, lon: 7.2215501 }, { tags: { created_by: \"JOSM\", ele: \"84.2526855469\", time: \"2004-12-28T16:40:08Z\" }, id: \"510854\", lat: 50.8070833, lon: 7.2210556 }, { tags: { ele: \"84.2526855469\", time: \"2004-12-28T16:40:13Z\" }, id: \"510855\", lat: 50.8074685, lon: 7.2208635 }, { tags: {}, id: \"11766986\", lat: 50.8082661, lon: 7.2200495 }, { tags: {}, id: \"1744718756\", lat: 50.8084219, lon: 7.2200803 }, { tags: {}, id: \"11766983\", lat: 50.808599, lon: 7.2201153 }, { tags: {}, id: \"1744718765\", lat: 50.8087172, lon: 7.2200909 }, { tags: {}, id: \"11766978\", lat: 50.8088329, lon: 7.2198782 }, { tags: {}, id: \"11766975\", lat: 50.8100349, lon: 7.218674 }, { tags: {}, id: \"510863\", lat: 50.8103464, lon: 7.2179697 }, { tags: {}, id: \"510864\", lat: 50.8104984, lon: 7.2176172 }, { tags: {}, id: \"510865\", lat: 50.8111111, lon: 7.2168889 } ], segments: [ { type: \"LineString\", coordinates: [ [ 7.2228032, 50.8051785 ], [ 7.2226525, 50.8054414 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2226525, 50.8054414 ], [ 7.2224028, 50.805692 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2224028, 50.805692 ], [ 7.2217995, 50.8062804 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2217995, 50.8062804 ], [ 7.2215501, 50.8065347 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2215501, 50.8065347 ], [ 7.2210556, 50.8070833 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2210556, 50.8070833 ], [ 7.2208635, 50.8074685 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2208635, 50.8074685 ], [ 7.2200495, 50.8082661 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2200495, 50.8082661 ], [ 7.2200803, 50.8084219 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2200803, 50.8084219 ], [ 7.2201153, 50.808599 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2201153, 50.808599 ], [ 7.2200909, 50.8087172 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2200909, 50.8087172 ], [ 7.2198782, 50.8088329 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2198782, 50.8088329 ], [ 7.218674, 50.8100349 ] ] }, { type: \"LineString\", coordinates: [ [ 7.218674, 50.8100349 ], [ 7.2179697, 50.8103464 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2179697, 50.8103464 ], [ 7.2176172, 50.8104984 ] ] }, { type: \"LineString\", coordinates: [ [ 7.2176172, 50.8104984 ], [ 7.2168889, 50.8111111 ] ] } ], _id: ObjectId('52a086fe2308d1ac1e000001') }", "code" : 16755, "n" : 0, "connectionId" : 2, "ok" : 1 }
I checked the format with http://geojsonlint.com/ but everything seems to be correct. Am I missing something or is indexing such an array not supported yet?