gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:29:32 26 4
gpt4 key购买 nike

根据 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com