How to aggregate by floor in MongoDB

2020-02-07 04:01发布

问题:

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

回答1:

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.