首页 > 解决方案 > 使用 $nearSphere 运算符后,如何重新排序此 mongodb 查询的结果?

问题描述

我正在查询一个Service使用 mongodb$nearSphere运算符调用的 mongoose 模型,以按距给定点的距离返回结果:

Service.find({ 
   $nearSphere: {
      $geometry: {
         type : "Point",
         coordinates : [myLng, myLat]
      }
   }
})
.limit(10)

$nearSphere按距离排序,但我的一些服务是“提升的”,所以我想将它们浮动到列表的顶部,不管距离如何。

我通常会$sort为此使用运算符,但我注意到 mongodb 文档中的一条注释不鼓励它。

是否可以将一些结果带到列表顶部,但保留现有的距离排序?

理想情况下,我宁愿不这样做:

标签: node.jsmongodbmongoose

解决方案


如果您不想根据距离进行排序,而是在其他字段上进行排序,则应使用$geoWithin而不是 $nearSphere。这是 MongoDB 文档不鼓励将 $sort 与 $nearSphere 一起使用的唯一原因。由于您将进行两次排序,这在同时使用 $nearSphere 和 $sort 时会浪费资源和时间。

如果您想根据另一个字段(例如“A”)和距离(当多个文档中的字段“A”相等)的组合进行排序,那么您需要使用带有$geoNear运算符的聚合管道,它将添加距离字段到您的结果,您可以按照您想要的方式进行排序。


推荐阅读