MongoDB GeoNear的结果除了距离以外的其他东西?

Mat*_*ond 4 sorting indexing geospatial mongodb mongodb-php

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

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

Gat*_* VP 5

但是,我想知道是否有办法通过create_date属性指定排序,而不是距离......

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

你有两个选择:

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

我想你要找的是$within命令

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

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

db.places.find(...).sort({created:1})
Run Code Online (Sandbox Code Playgroud)

但是,within命令可能会提供太多结果,因此您可能希望使用一些逻辑来限制返回的项目数$within.

db.places.find(...).limit(50).sort({created:1})
Run Code Online (Sandbox Code Playgroud)

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