根据MongoDB documentation $ near运算符按距离排序:
$靠近距离排序文件
按顺序,单词中最接近参考点的是返回的第一个元素。
有没有办法保留订单?我的意思是,先退回最远的元素。
答案 0 :(得分:4)
确定有一种方法可以首先返回最远的元素,即将$geoNear
与聚合框架一起使用。但是当然有一个" catch",因为你所要求的实际上是这种搜索功能通常用于什么的对立面。
作为最初的管道阶段,它的工作是通过强制预测的距离"返回结果。来自查询点的字段。然后,这允许您添加一个$sort
管道阶段,该阶段将返回"距离"在"降序"。当时是最大的"因此"最远"距离点的距离。
基本上是这样的形式,并注意到" catch":
db.collection.aggregate([
{ "$geoNear": {
"near": {
"type": "Point",
"coordinates": [longitude,latitude]
},
"spherical": true,
"distanceField": "distance",
"limit": 999999 // <-- That's the one!
}},
{ "$sort": { "distance": -1 } }
])
所以,当你看到你看到"near"
选项应该是自我解释时,以及"spherical"
当然在&#34; 2d&#34;之间进行切换。和&#34; 2dsphere&#34;索引。还提到了这里需要的"distanceField"
,它将是文档中写入计算距离的路径。但还有一个重要的选项。
如上所述,一般意图是最近,因此这种性质的大多数查询最好只返回确实&#34;最近&的数据的子集。 #34; 到查询点。这意味着要返回的文档"limit"
。查看文档将揭示典型的&#34;默认&#34; 100。
因为这个想法是反向的情况,那么您应该定位的是一个比集合中的总文档更大的数字。这将允许整个集合由管道阶段检查,从而产生每个文档的计算距离。当然,它只需要$sort
即可完成它并将文件退回到最远的地方&#34;顺序。
这是最佳的吗?当然,这不是正确的,因为你只是要求与&#34; near&#34; 的含义完全相反。如果有一个&#34;内置&#34; $far
或$geoFar
运算符,那么我们可以期待不同。
但这是一个过程。也许如果你看似即将到来的&#34;让我尽可能远离这里!&#34; 应用程序确实引起了世界的轰动,那么也许我们都会想到这些与你同行。