首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >$near算子在MongoDB中的反向距离排序

$near算子在MongoDB中的反向距离排序
EN

Stack Overflow用户
提问于 2016-02-23 08:46:58
回答 1查看 948关注 0票数 3

根据MongoDB文档,$near操作符按距离排序:

$near按距离排序文档

按照顺序,查询中最接近引用点的是返回的第一个元素。

有什么办法保留订单吗?我是说,先归还最远的元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 10:39:35

当然,有一种方法可以首先返回最远的元素,那就是在聚合框架中使用$geoNear。但当然也有一个“捕捉”,因为您所问的实际上是这种搜索函数的典型用途的对立面。

作为初始管道阶段,它的工作是从被查询的点返回带有强制投影“距离”字段的结果。这样您就可以添加一个$sort管道阶段,它将以“降序”返回“距离”。当时是“最大”,因此也是“最远”距离点。

基本上以这样的形式出现,并注意到“捕获”:

代码语言:javascript
运行
复制
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",它当然是在"2d“和"2dsphere”索引之间划分的。正如前面提到的,这里需要的是"distanceField",它将是写入计算距离的文档中的路径。但是还有一个重要的选项。

如前所述,总的意图是最近的,因此,大多数这种性质的查询最好只返回一个子集合的数据,这些数据确实“最近”到被查询的点。这意味着要返回文档上的"limit"。看一看文档,就会发现典型的“默认”100。

因此,由于这个想法是相反的情况,那么您应该针对的是一个比集合中的文档总数更大的。这将允许由管道阶段检查整个集合,从而为每个文档计算出一个距离。当然,它只是去$sort做它的事情,并以“最远”的顺序返回文档。

这是最优的吗?当然不是,既然你只是问“近”这个词的意思正好相反,这是正确的。如果有一个“内置”的$far$geoFar运算符,那么我们可以期待不同的。

但这就是过程。也许你即将到来的“让我离这里越远越好!”应用程序确实在世界上引起轰动,那么也许我们都会和你一起思考这些问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35572755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档