Skip to content

Commit

Permalink
5.17. Добавит ограничение для вывода списка категорий и сортировку.
Browse files Browse the repository at this point in the history
Немного улучшим агрегацию. Во-первых, толку от поля `offers` никакого.
Мы им воспользовались один раз, чтобы посчитать количество элементов.
Больше в нём нет необходимости. Раз так, можно от него избавиться,
чтобы не передавать лишние данные. Для этого воспользуемся оператором
`$unset`. Значением передаём название поля, которое нужно удалить.

Затем ограничим вывод списка категорий шестью. Для этого мы завели
константу `MAX_CATEGORIES_COUNT`. Ограничение сделаем с помощью
оператора `$limit`.

Последним шагом выполним сортировку выборки. Отсортируем категории по
убыванию. Полем для сортировки станет `offerCount`. Сначала будут
категории с бОльшим количеством объявлений.

Всё, на этом закончим с агрегацией.
  • Loading branch information
AntonovIgor committed Sep 10, 2024
1 parent b998391 commit 9fc0c86
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/shared/modules/category/category.constant.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const MAX_CATEGORIES_COUNT = 6;
6 changes: 5 additions & 1 deletion src/shared/modules/category/category.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { inject, injectable } from 'inversify';
import { DocumentType, types } from '@typegoose/typegoose';

import { CategoryService } from './category-service.interface.js';
import { Component } from '../../types/index.js';
import { Component, SortType } from '../../types/index.js';
import { Logger } from '../../libs/logger/index.js';
import { CategoryEntity } from './category.entity.js';
import { CreateCategoryDto } from './dto/create-category.dto.js';
import { MAX_CATEGORIES_COUNT } from './category.constant.js';

@injectable()
export class DefaultCategoryService implements CategoryService {
Expand Down Expand Up @@ -55,6 +56,9 @@ export class DefaultCategoryService implements CategoryService {
{ $addFields:
{ id: { $toString: '$_id'}, offerCount: { $size: '$offers'} }
},
{ $unset: 'offers' },
{ $limit: MAX_CATEGORIES_COUNT },
{ $sort: { offerCount: SortType.Down } }
]).exec();
}
}
1 change: 1 addition & 0 deletions src/shared/modules/category/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ export { CategoryService } from './category-service.interface.js';
export { CategoryEntity, CategoryModel } from './category.entity.js';
export { DefaultCategoryService } from './category.service.js';
export { createCategoryContainer } from './category.container.js';
export { MAX_CATEGORIES_COUNT } from './category.constant.js';

0 comments on commit 9fc0c86

Please sign in to comment.