Mongodb 几何体的索引未按预期工作
这是我的命令行的输出。 您可以看到,第一次尝试创建索引失败。 然后我把loc字段重命名为坐标,它就可以工作了??? 谁能给我解释一下吗。这似乎是一种奇怪的行为Mongodb 几何体的索引未按预期工作,mongodb,indexing,geometry,geospatial,geo,Mongodb,Indexing,Geometry,Geospatial,Geo,这是我的命令行的输出。 您可以看到,第一次尝试创建索引失败。 然后我把loc字段重命名为坐标,它就可以工作了??? 谁能给我解释一下吗。这似乎是一种奇怪的行为 > db.nodes.find().limit(3) { "_id" : ObjectId("534d36b682beda5978db27c1"), "geo" : { "type" : "Point", "loc" : [ 9.7366511, 52.3711883 ] } } { "_id" : ObjectId("534d36
> db.nodes.find().limit(3)
{ "_id" : ObjectId("534d36b682beda5978db27c1"), "geo" : { "type" : "Point", "loc" : [ 9.7366511, 52.3711883 ] } }
{ "_id" : ObjectId("534d36b682beda5978db27c2"), "geo" : { "type" : "Point", "loc" : [ 9.7399576, 52.3691615 ] } }
{ "_id" : ObjectId("534d36b682beda5978db27c3"), "geo" : { "type" : "Point", "loc" : [ 9.7346094, 52.371738 ] } }
> db.nodes.ensureIndex({"geo":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "Can't extract geo keys from object, malformed geometry?: { _id: ObjectId('534d36b682beda5978db27c1'), geo: { type: \"Point\", loc: [ 9.7366511, 52.3711883 ] } }",
"code" : 16755
}
> db.nodes.find().limit(3)
{ "_id" : ObjectId("534d36ea82be11ca6e9fb112"), "geo" : { "type" : "Point", "coordinates" : [ 9.7366511, 52.3711883 ] } }
{ "_id" : ObjectId("534d36ea82be11ca6e9fb113"), "geo" : { "type" : "Point", "coordinates" : [ 9.7399576, 52.3691615 ] } }
{ "_id" : ObjectId("534d36ea82be11ca6e9fb114"), "geo" : { "type" : "Point", "coordinates" : [ 9.7346094, 52.371738 ] } }
> db.nodes.ensureIndex({"geo":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
不清楚为什么第二次尝试会悄然失败,但这里的主要问题是您的json结构不完全符合GeoJSON规范 点GeoJSON结构的坐标应包含在名为坐标而非loc的键中 尝试使用创建索引 {u id:ObjectId534d36b682beda5978db27c3,地理:{类型:点,坐标:[9.7346094,52.371738]} 记住,在坐标数组中,经度始终是第一位的!:]