使用MongoDB的一点Geo-logic

时间:2015-10-15 19:02:39

标签: mongodb mongodb-query

所以,我正在阅读关于MongoDB的文档,我仍然在完成一些事情上遇到一些麻烦。但是这个问题目前是我最大的问题。

我需要从一个集合中返回距离设定纬度和经度位置不到20英里的所有文档,幸运的是this page我找到了这个宝石。

db.places.find( {
  loc: { $geoWithin: { $centerSphere: [ [ 62, 62 ], 100/3963.2 ] } }
} )

返回62,62 100英里范围内的所有文件  显然,我所要做的就是将100改为20而我是金,对吧?好吧,差不多。我还需要知道每个文档距离原始点多少英里。例如:

var user {
    name: 'Thomas',
    latitude: 61,
    longitude: 62
}

众所周知,1度纬度为69英里,因此这些文件相距69英里。执行原始查询很好,因为文档将被返回,但现在我不知道...

  

好的,所以这个文件(用户)在100英里范围内,但他有多远?

那么我该如何将值添加到文档中(仅用于返回目的)。来自SQL它很简单(好吧,有点),看起来像这样:

SELECT  *,
(3963.2 * acos(cos(radians(62))
        * cos(radians(latitude)) 
        * cos(radians(longitude) 
        - radians(62)) 
        + sin(radians(62)))) AS distance
FROM users;

这将返回整行(文档),其中distance的附加字段显示62,62的里程数。

编辑:我很高兴注意到我使用的是.aggregate()而不是.find(),原因是对此query(?)进行了大量的过滤。

0 个答案:

没有答案