node.js - 使用 $nearSphere 运算符后,如何重新排序此 mongodb 查询的结果?
问题描述
我正在查询一个Service
使用 mongodb$nearSphere
运算符调用的 mongoose 模型,以按距给定点的距离返回结果:
Service.find({
$nearSphere: {
$geometry: {
type : "Point",
coordinates : [myLng, myLat]
}
}
})
.limit(10)
$nearSphere
按距离排序,但我的一些服务是“提升的”,所以我想将它们浮动到列表的顶部,不管距离如何。
我通常会$sort
为此使用运算符,但我注意到 mongodb 文档中的一条注释不鼓励它。
是否可以将一些结果带到列表顶部,但保留现有的距离排序?
理想情况下,我宁愿不这样做:
- 进行第二次查询
- 重构一切以使用聚合,因为我担心性能(这是一个合理的问题吗?我应该是吗?)
解决方案
如果您不想根据距离进行排序,而是在其他字段上进行排序,则应使用$geoWithin而不是 $nearSphere。这是 MongoDB 文档不鼓励将 $sort 与 $nearSphere 一起使用的唯一原因。由于您将进行两次排序,这在同时使用 $nearSphere 和 $sort 时会浪费资源和时间。
如果您想根据另一个字段(例如“A”)和距离(当多个文档中的字段“A”相等)的组合进行排序,那么您需要使用带有$geoNear运算符的聚合管道,它将添加距离字段到您的结果,您可以按照您想要的方式进行排序。
推荐阅读
- hcl - 拼写检查数组缺少 WCS 9.1
- javascript - 如何访问传递给 scriptEngine 的 Java 对象的属性?
- material-ui - 树视图 gmail 克隆层问题
- svcutil.exe - svcutil.exe 无法生成代理“错误:缺少命名空间 http://xml.avaya.com/ws/VPAppIntf/VoicePortal 中名为 null 的元素消息”
- math - Jupyter 定理环境
- javascript - 对数组进行排序,直到 3 个元素按顺序排列,其余元素保持原样
- c# - 将大文本文件拆分为较小的文本文件
- html - Favicon 不仅会出现在 Chrome 中,还会出现在 Explorer、Mozilla、Opera 和 Edge 中
- linux - cmake qt6静态ubuntu:libicuuc.so.66:添加符号时出错:命令行中缺少DSO
- flutter - 从 Flutter 中的方法返回图像