mongodb - 在 MongoDB 中使用 $near 运算符反转距离顺序

标签 mongodb mongodb-query aggregation-framework

根据 MongoDB documentation $near 运算符按距离排序:

$near sorts documents by distance

换句话说,查询中最接近引用点的是返回的第一个元素。

有什么方法可以保留顺序吗?我的意思是,首先返回最远的元素。

最佳答案

确实有一种方法可以先返回最远的元素,那就是使用$geoNear。与聚合框架。但是当然有一个“陷阱”,因为您要问的实际上是这种搜索功能通常用于的对立面。

作为初始管道阶段,它的工作是返回结果,其中包含距查询点的强制投影“距离”字段。然后,这允许您添加 $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" ,它当然在 "2d"之间进行区分和“2dsphere”索引。如前所述,此处还需要 "distanceField",这将是文档中写入计算距离的路径。但是还有一个重要选项。

如前所述,一般意图是最近,因此大多数这种性质的查询最好只返回确实“最近” 到查询点。这意味着要返回的文档有一个“限制”。查看文档会发现典型的“默认值”为 100。

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


这是最优的吗?好吧,当然不是,这是正确的,因为您只是要求与 “附近” 完全相反的意思作为一个词。如果有一个“内置的”$far$geoFar 运算符,那么我们可能会有所不同。

但这就是过程。也许如果你即将推出的“让我离这里越远越好!”应用程序真的在世界上引起了轰动,那么也许我们都会和你一起思考这些问题。 p>

关于mongodb - 在 MongoDB 中使用 $near 运算符反转距离顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572755/

相关文章:

mongodb:查询数组的计数/大小

mongodb - 如何在Mongodb java驱动程序中编写多个group by id字段

java - 如何将 MongoDB 结果从 $dateToString 操作转换为 Java 对象

java - 带有 Java 客户端的键值数据库

ruby-on-rails - 带有 accepts_nested_attributes_for 的 Mongoid 自引用

java - 为什么会出现以下错误 : Can't find a codec for class com. mongodb.client.model.geojson.Polygon

mongodb - 每个桶的顶级文档

javascript - 如何将draft-js editorState数据保存到Meteor?

Node.js、mongodb 和过滤查询

python - 删除mongodb中的重复值