内部结构地理空间索引

发布于 2024-12-09 06:21:47 字数 547 浏览 0 评论 0原文

我有一个名为 locations 的集合,其数据结构如下:

{ 
  "_id" : ObjectId("4e95263f1783ae8487be26d4"),
  "name" : "test 1", 
  "location" : { 
     "coordinate" : { 
        "latitude" : 40.731987, 
        "longitude" : -73.999701
     },
     "address": "xxxxxxx"
  }
}

并希望针对 location.cooperative 字段进行地理查询。

当我尝试添加索引时,我得到以下结果:

$> db.locations.ensureIndex( { "location.coordinate" : "2d" } )
$> **** SyntaxError: syntax error (shell):0

是否可以对此类结构使用地理空间索引?

I have a collections names locations with data structures like:

{ 
  "_id" : ObjectId("4e95263f1783ae8487be26d4"),
  "name" : "test 1", 
  "location" : { 
     "coordinate" : { 
        "latitude" : 40.731987, 
        "longitude" : -73.999701
     },
     "address": "xxxxxxx"
  }
}

and want to make geo queries against location.coordinate field.

When I'm trying to add index I get following results:

gt; db.locations.ensureIndex( { "location.coordinate" : "2d" } )
gt; **** SyntaxError: syntax error (shell):0

Is it possible to use geospatial index for such structure?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拿命拼未来 2024-12-16 06:21:47

由于 mongodb 基于 GeoJSON 格式,因此最好先将经度元素放在

"location" : { 
     "coordinate" : {        
        "longitude" : -73.999701,
        "latitude" : 40.731987 
     },

< a href="http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-CreatingtheIndex" rel="nofollow">mongodb 地理空间页面,你可以在多个地方看到

默认情况下,索引假定您正在索引经度/纬度,并且
因此配置为 [-180..180) 值范围。

代码假设您在(经度,
纬度)顺序。这与 GeoJSON 规范使用的顺序相同。
使用(纬度,经度)将导致非常不正确的结果,但是
通常是其他地方使用的顺序,因此最好仔细检查。
您分配给位置对象的名称(如果使用对象而不是
一个数组)被完全忽略,只检测顺序。

Since mongodb is based on GeoJSON format, its better to have the longitude element first

"location" : { 
     "coordinate" : {        
        "longitude" : -73.999701,
        "latitude" : 40.731987 
     },

In the mongodb geospatial page, you can see that in multiple places

By default, the index assumes you are indexing longitude/latitude and
is thus configured for a [-180..180) value range.

and

The code assumes that you are using decimal degrees in (longitude,
latitude) order. This is the same order used for the GeoJSON spec.
Using (latitude, longitude) will result in very incorrect results, but
is often the ordering used elsewhere, so it is good to double-check.
The names you assign to a location object (if using an object and not
an array) are completely ignored, only the ordering is detected.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文