Здесь я вижу два варианта: один - это серия вложенных $cond
с, другой - оператор $bucket
.
Использование $cond
довольно просто:
db.collection.aggregate([
{$project: {
category: {$cond: {
if: {$lte: ['$field', 10]},
then: 'A',
else: {$cond: {
if: {$lte: ['$field', 14]},
then: 'B',
else: ...
}}
}}
}}
])
И так далее. Я надеюсь, у вас есть идея.
Использование $bucket
не сложно, но определенно сложнее понять:
db.collection.aggregate([
{$bucket: {
groupBy: '$field',
// These are exclusive on the upper bound!
boundaries: [1, 10.1, 14.1, 16.1, 50.1],
default: 'Other',
output: {
docs: {$push: '$$ROOT'}
}
}}
])
Эти две формы выводят совершенно разные фигуры, поэтому вам придется поиграть с ними и настроить по мере необходимости.