|
|
@@ -1050,6 +1050,66 @@ console.log(res); // true
|
|
|
- `fields: string[]` выбор необходимых свойств модели
|
|
|
- `include: object` включение связанных данных в результат
|
|
|
|
|
|
+**Примеры**
|
|
|
+
|
|
|
+Объект фильтрации позволяет комбинировать различные опции для построения
|
|
|
+сложных запросов. Представим, что нам нужно выбрать из коллекции новости
|
|
|
+для отображения на сайте по следующему набору критериев:
|
|
|
+
|
|
|
+- Заголовок должен содержать слово «Moscow» без учета регистра.
|
|
|
+- Дата публикации должна быть не ранее 15 октября 2025 года.
|
|
|
+- Новость должна содержать один из тегов: «world» или «politic».
|
|
|
+- Новость не должна быть скрытой `hidden: false`.
|
|
|
+- Результат должен быть отсортирован сначала по дате публикации.
|
|
|
+- Нужно пропустить первые 24 записи и выбрать следующие 12.
|
|
|
+- Выборка должна включать только поля `title`, `annotation` и `body`.
|
|
|
+- К каждой новости добавить данные из моделей `author` и `category`.
|
|
|
+
|
|
|
+```js
|
|
|
+// для запроса используется метод репозитория "find"
|
|
|
+// с передачей объекта фильтрации первым аргументом
|
|
|
+const news = await newsRepository.find({
|
|
|
+ where: {
|
|
|
+ title: {regexp: 'Moscow', flags: 'i'},
|
|
|
+ publishedAt: {gte: '2025-10-15T00:00:00.000Z'},
|
|
|
+ tags: {inq: ['world', 'politic']},
|
|
|
+ hidden: false,
|
|
|
+ },
|
|
|
+ order: 'publishedAt DESC',
|
|
|
+ limit: 12,
|
|
|
+ skip: 24,
|
|
|
+ fields: ['title', 'annotation', 'body'],
|
|
|
+ include: ['author', 'category'],
|
|
|
+})
|
|
|
+```
|
|
|
+
|
|
|
+Пример получения профиля пользователя со списком его последних постов.
|
|
|
+
|
|
|
+- Найти пользователя по уникальному имени в свойстве `username`.
|
|
|
+- Из данных пользователя вернуть только имя, URL аватара и биографию.
|
|
|
+- Включить в результат 5 *опубликованных* постов данного пользователя.
|
|
|
+- Для каждого поста вернуть только заголовок и дату создания.
|
|
|
+- К каждому посту также прикрепить данные о категории.
|
|
|
+
|
|
|
+```js
|
|
|
+// для запроса используется метод "findOne"
|
|
|
+// и вложенные фильтры в опции "include"
|
|
|
+const userProfile = await userRepository.findOne({
|
|
|
+ where: { username: 'john.doe' },
|
|
|
+ fields: ['username', 'avatarUrl', 'bio'],
|
|
|
+ include: {
|
|
|
+ relation: 'posts',
|
|
|
+ scope: {
|
|
|
+ where: {status: 'published'},
|
|
|
+ order: 'createdAt DESC',
|
|
|
+ limit: 5,
|
|
|
+ fields: ['title', 'createdAt'],
|
|
|
+ include: 'category',
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
### where
|
|
|
|
|
|
Параметр принимает объект с условиями выборки и поддерживает широкий
|