我是MongoDB的新手,我直接跳到了地理空间查询的深水区。我注意到geoNear
命令和$geoNear
聚合操作符可以输出计算出的距离(使用distanceField
)。
该命令和运算符还按距离对结果进行排序。
有没有一种方法可以输出距离而不按距离排序?即使用某种投影运算符。这显然可以使用带有javascript函数的map
手动计算距离,但似乎有一个内置的距离计算函数必须更高效。此外,使用$geoNear
运算符,然后(在聚合管道中)对结果进行排序似乎效率很低……对吗?
谢谢
发布于 2015-02-10 23:38:33
由于$geoNear
查询的num和limit参数(这两个参数是互斥的--如果这两个参数都存在,则使用num覆盖限制,请参见docs),因此必须按距离对结果进行排序,以确定返回哪些结果。因此,实际上,返回排序后的结果并不需要额外的工作。据我所知,不按距离排序返回结果是不可能的。
这在分片的情况下特别有意义,因为查询必须发送到所有分片,然后根据num和/或geo key的值组合并返回结果。
MongoDB不像一些空间数据库那样使用R树索引,这可以使距离搜索更有效率,而是使用地理散列上的B树,因此距离查询将通过比较最近象限中的距离来工作,直到找到足够的数字,这可能大于num或limit,然后在对距离进行排序后仅返回该数字。
https://stackoverflow.com/questions/28431131
复制相似问题