所以,我正在阅读关于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(?)
进行了大量的过滤。