我有一个MongoDB集合。集合中的每个文档都有x,y个协调,表示网格上的位置。给定一个点(x',y')我想检索它们的位置最靠近(x',y')欧几里德距离的前k个文档。我在rails应用程序中使用MongoDB。如果可能,我想在数据库上进行计算。我该怎么办?
答案 0 :(得分:1)
如果将坐标存储为数组[x,y],则只需在该字段上创建地理空间索引(“2d”)。
查询索引:
db.runCommand({geoNear: <collection>, near: [x, y], limit: k})
如果您使用的是MongoDB 2.4,首选方法是使用GeoJSON格式(即{type:“Point”,坐标:[x,y]})和“2dsphere”索引,但传统格式也是支撑。
查询索引:
db.runCommand({geoNear: <collection>, near: {type: "Point", coordinates:[x, y]}, limit: k})
geoNear命令返回按距离排序的结果。
以下是文档: