我有一个 MongoDB 集合。集合中的每个文档都有 x,y 坐标,表示网格上的位置。给定一个点 (x',y') 我想通过欧几里得距离检索其位置最接近 (x',y') 的前 k 个文档。我正在使用 Rails 应用程序中的 MongoDB。如果可能的话,我想在数据库上进行计算。我该怎么做?
问问题
650 次
1 回答
1
如果将坐标存储为数组 [x, y],则只需在该字段上创建一个地理空间索引(“2d”)。
查询索引:
db.runCommand({geoNear: <collection>, near: [x, y], limit: k})
如果您使用的是 MongoDB 2.4,首选方法是使用 GeoJSON 格式(即 {type: "Point", coordinates: [x, y]})和 "2dsphere" 索引,但也支持旧格式。
查询索引:
db.runCommand({geoNear: <collection>, near: {type: "Point", coordinates:[x, y]}, limit: k})
geoNear 命令返回按距离排序的结果。
这是文档:
- 二维索引 - http://docs.mongodb.org/manual/core/2d/
- 2dsphere 索引 (2.4) - http://docs.mongodb.org/manual/core/2dsphere/
于 2013-08-26T15:19:59.270 回答