首页 > 解决方案 > Mongodb根据动态字段和静态字段对文档进行排序

问题描述

我正在尝试编写一个查询,以便在获取用户列表时,以取决于两个字段的方式对用户进行排序。

第一个是使用 $geoNear 查询计算的距离字段。第二个字段是用户文档上的“人气”字段。

为简单起见,我想按权重为 的“权重”算法进行排序0.7 * distance + 0.3 * popularity

我将如何在 mongodb 中实现一些东西?这甚至可以在 mongodb 中有效地完成吗?

标签: mongodb

解决方案


您将使用aggregation管道执行此操作。您可以有单独的阶段来处理这个问题,例如执行地理空间查询并存储计算的距离,然后执行投影以计算weight,最后sort对新生成的weight字段执行 a 。

至于有效地做到这一点,那是不会发生的。只有当您拥有一组已知值时,效率才会出现,而您想要的值在运行时计算之前都是未知的。只需确保您的$geoNear查询返回大小不会有问题的文档子集,您应该没问题。


推荐阅读