一点使用MongoDB的地理逻辑
所以,我正在浏览关于MongoDB的文档,但在完成一些事情时仍然有点困难。然而,这个问题是我目前最大的问题 我需要从一个集合中返回距离设置的经纬度位置不到20英里的所有文档,幸运的是我找到了这个宝石一点使用MongoDB的地理逻辑,mongodb,mongodb-query,Mongodb,Mongodb Query,所以,我正在浏览关于MongoDB的文档,但在完成一些事情时仍然有点困难。然而,这个问题是我目前最大的问题 我需要从一个集合中返回距离设置的经纬度位置不到20英里的所有文档,幸运的是我找到了这个宝石 db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ 62, 62 ], 100/3963.2 ] } } } ) 返回距离62,62100英里内的所有文档 显然,我所要做的就是把100改成20,我就成了黄金,对吗?嗯,差不多了。我
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;
这将返回整行(文档),并带有显示62,62里程的附加字段distance
编辑:值得注意的是,我使用的是.aggregate()而不是.find(),因为在这个
查询(?)
上进行了大量的过滤 我认为,您只需要使用命令geoNear
来执行此任务,它不仅可以获取某个半径内的对象,还可以同时计算距离:据我所知,geoNear
不能用于.aggregate()
在这里,我已经通过大约10个不同的查询筛选出了很多文档。(从而减少服务器上所需的地理计算量)geoNear
确实做了我想做的事情,也许有一种方法可以只对我调用.aggregate()
返回的文档运行它?考虑到我的应用程序需要进行的过滤量,这将是最有益的“已经是朋友,被阻止,已经等待,已经拒绝,不在评级标准之内,不在x,不在y,不在z,不在男性/女性,不在x岁以上,不在x岁以下,然后在x英里内订购。距离计算是唯一让我感到困惑的部分。geoNear
可以只是聚合管道的一部分。下面是文档,它解释了这一点:@Rodion-有没有一种方法我没有找到文档中聚合管道内部的特殊功能?我只有在谷歌搜索1200种不同的单词组合时才幸运地遇到它们。