一点使用MongoDB的地理逻辑

一点使用MongoDB的地理逻辑,mongodb,mongodb-query,Mongodb,Mongodb Query,所以,我正在浏览关于MongoDB的文档,但在完成一些事情时仍然有点困难。然而,这个问题是我目前最大的问题 我需要从一个集合中返回距离设置的经纬度位置不到20英里的所有文档,幸运的是我找到了这个宝石 db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ 62, 62 ], 100/3963.2 ] } } } ) 返回距离62,62100英里内的所有文档 显然,我所要做的就是把100改成20,我就成了黄金,对吗?嗯,差不多了。我

所以,我正在浏览关于MongoDB的文档,但在完成一些事情时仍然有点困难。然而,这个问题是我目前最大的问题

我需要从一个集合中返回距离设置的经纬度位置不到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种不同的单词组合时才幸运地遇到它们。