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

标签 sorting mongodb indexing geospatial mongodb-php

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

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

最佳答案

However, I was wondering if there was a way to specify sorting by the create_date attribute, rather than distance...

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

这里有两个选择:

  1. 限制$near的结果
  2. 使用$within命令

我想你要找的是 $within 命令

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 命令的值通常会开始下降。您的客户端代码可能想要检查您是否达到了最大结果。

关于按距离以外的其他方式对 MongoDB GeoNear 结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503562/

相关文章:

algorithm - 为什么二分搜索算法中的赋值不会增加时间复杂度?

Javascript:排序对象

silverlight - 我可以检测到在 Silverlight 中排序的数据网格列吗?

macos - 是否有一个终端命令可以用来关闭 OS X 中的 mongod 进程?

mongodb - 如何基于唯一元素作为字段创建聚合?

apache-flex - 如何对具有分层数据的AdvancedDataGrid进行排序?

javascript - 具有多个 $match 或 $pipeline 条件的 Mongo $lookup

python - 查找多行的索引

sql-server - 索引性能,集群与非集群

python - 像 'numpy.take' 这样的 Numpy 赋值