Skip to content

Commit

Permalink
5.16. Добавит новое поле offerCount для каждой категории.
Browse files Browse the repository at this point in the history
У нас есть список объявлений, которые относятся к определённой категории. В принципе, на этом можно и закончить. Необходимую информацию (количество) можно получить обратившись к свойству `length` массива `offers`. Но давайте пойдём дальше и попробуем решить эту задачу на этапе выборке. Для этого добавим новое поле с помощью оператора `$addFields`. Поле назовём `offerCount`. Его значением будет результат выполнения оператора `$size` для поля `$offers`. Оператор `$size` позволяет получить количество элементов в массиве.

Обратите внимание, что мы дополнительно определяем поле `id`. В него мы сохраняем значение `_id`, предварительно сконвертировав его в строку.

Это необходимо сделать, так как результат агрегации не будет соответствовать `CategoryEntity`. По структуре этот то же объект, но в нём не будет псевдонима `id`, который нам предоставляет `Typegoose`. Добавим его самостоятельно.

В принципе, задача решена. Если посмотреть вывод списка категорий
(сделать запрос), то видно, что поле `offerCount` появилось и заполняется. Но можно немного улучшить результат.
  • Loading branch information
AntonovIgor committed Sep 10, 2024
1 parent 602ea1d commit b998391
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/shared/modules/category/category.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ export class DefaultCategoryService implements CategoryService {
as: 'offers'
},
},
{ $addFields:
{ id: { $toString: '$_id'}, offerCount: { $size: '$offers'} }
},
]).exec();
}
}

0 comments on commit b998391

Please sign in to comment.