按距离以外的其他因素对 MongoDB GeoNear 结果进行排序?

2023-12-07

我正在开发一个 PHP 应用程序,其中我们需要检索特定边界内的结果,但按结果的创建日期而不是距离排序。我认为 MongoDB 的 geoNear 命令对此非常有用,因为它负责计算每个结果的距离。但是,我想知道是否有一种方法可以指定按 create_date 属性而不是距离进行排序。理想情况下,我将创建坐标和创建日期的复合键索引,然后快速检索按创建日期排序的特定区域中的所有结果。

这是可能的,还是我必须在查询后进行排序?


但是,我想知道是否有一种方法可以指定按 create_date 属性而不是距离进行排序......

如果您正在使用$near命令那么你必须首先按距离排序,否则“近”的概念实际上没有任何意义。在地球上,一切都可以“接近”给定点,这只是“接近”的问题。

您在这里有两个选择:

  1. 限制结果$near
  2. use the $within command

我想你正在寻找的是$within command

center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

然后您可以通过其他键对它们进行排序:

db.places.find(...).sort({created:1})

但是,within 命令可能会提供太多结果,因此您可能需要添加一些逻辑来限制由$within.

db.places.find(...).limit(50).sort({created:1})

事实是,如果你达到了特定的限制,你的价值$within命令通常开始下降。您的客户端代码可能想要检查您是否达到了最大结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按距离以外的其他因素对 MongoDB GeoNear 结果进行排序? 的相关文章

随机推荐