mongodb - Mongodb根据动态字段和静态字段对文档进行排序
问题描述
我正在尝试编写一个查询,以便在获取用户列表时,以取决于两个字段的方式对用户进行排序。
第一个是使用 $geoNear 查询计算的距离字段。第二个字段是用户文档上的“人气”字段。
为简单起见,我想按权重为 的“权重”算法进行排序0.7 * distance + 0.3 * popularity
。
我将如何在 mongodb 中实现一些东西?这甚至可以在 mongodb 中有效地完成吗?
解决方案
您将使用aggregation
管道执行此操作。您可以有单独的阶段来处理这个问题,例如执行地理空间查询并存储计算的距离,然后执行投影以计算weight
,最后sort
对新生成的weight
字段执行 a 。
至于有效地做到这一点,那是不会发生的。只有当您拥有一组已知值时,效率才会出现,而您想要的值在运行时计算之前都是未知的。只需确保您的$geoNear
查询返回大小不会有问题的文档子集,您应该没问题。
推荐阅读
- c++11 - 检查 << 运算符是否适用于覆盖模板上下文
- matlab - 谁能帮我解决有关 DPARSF 的问题?
- r - 泛化 data.frame 子集函数
- spring-webflux - 如何为 Spring Webflux WebClient (ReactorClientHttpConnector) 设置授权代理?
- javascript - 使用 getelementid 更改 SVG 过滤器
- java - java.lang.RuntimeException:RESTEASY003940:无法实例化 MessageBodyReader
- java - Java 命令行参数:简单打印不适用于“@%&^%”(不带引号)。请解释
- python - 如何在世界坐标系中绘制相机位置?
- node.js - 在中间件文件中编码或清理请求正文
- java - Spring:使用@EntityScan 禁用自动实体发现