是否有一种方法来指定在MongoDB多列排序的bin宽度?



这是我的排序对象:

{
income: 1,
age: 1
}

问题是income在理论上是一个实数,因此是唯一的。因此,这可能使age没有效果,除非income可以被分类。

如何在MongoDB聚合中指定这个?如果可能的话,这个清理行动会不会太昂贵?

这可以很容易地通过聚合阶段实现:

db.collection.aggregate([
{$set: { roundedIncome: { $floor: "$income"}}},
{$sort: {"roundedIncome": 1, "age": 1}}
])

您当然可以将$floor更改为您想要的分辨率的任何表达式(例如,1dp等)。

正如你所指出的——这有性能方面的考虑——最大的一个是如果你希望在income上使用索引进行排序——现在不会这样了,这将导致内存中排序(有相应的限制)。

否则的成本将相当于每个文档查看1个Math.floor操作。这可能最终成为整个集合-因为你不能跳过/限制,直到你已经排序,你不能排序,直到你运行$set

您可以通过先在income上运行排序,然后跳过/限制,然后在最后运行$set+$sort来在一定程度上否定成本-您的结果将稍微不准确-但可能是可接受的

相关内容

  • 没有找到相关文章

最新更新