How to aggregate by floor in MongoDB

2020-02-07 03:53发布

MongoDB Aggregation Framework doesn't have floor function. It only has simple arithmetic operators. So, how to compose floor function using them?

1条回答
Explosion°爆炸
2楼-- · 2020-02-07 04:38

According to definition floor(number) = number - (number % step) we can compose our aggregation formula:

{$subtract: ["$number", {$mod: ["$number", <step>]}]}

where step is order of magnitude. First, it computes remainder with $mod and then it computes difference with $subtract.

So, grouping Users by age floored to whole numbers will be

db.users.aggregate(
    {$group: {_id: {$subtract: ["$age", {$mod: ["$age", 1]}] }}} )

If you want to floor to 10s or 1000s use 10 or 1000 instead of 1.

查看更多
登录 后发表回答