e22m4u 1 месяц назад
Родитель
Сommit
bac9b3e1f6
1 измененных файлов с 107 добавлено и 28 удалено
  1. 107 28
      README.md

+ 107 - 28
README.md

@@ -41,7 +41,7 @@ npm install @e22m4u/js-repository
 | `memory`  | Виртуальная база в памяти процесса (не требует установки)                                                                      |
 | `memory`  | Виртуальная база в памяти процесса (не требует установки)                                                                      |
 | `mongodb` | MongoDB - система управления NoSQL базами (*[установка](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* |
 | `mongodb` | MongoDB - система управления NoSQL базами (*[установка](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* |
 
 
-## Импорт
+# Импорт
 
 
 Модуль поддерживает ESM и CommonJS стандарты.
 Модуль поддерживает ESM и CommonJS стандарты.
 
 
@@ -57,7 +57,7 @@ import {DatabaseSchema} from '@e22m4u/js-repository';
 const {DatabaseSchema} = require('@e22m4u/js-repository');
 const {DatabaseSchema} = require('@e22m4u/js-repository');
 ```
 ```
 
 
-## Описание
+# Описание
 
 
 Модуль позволяет абстрагироваться от различных интерфейсов баз данных,
 Модуль позволяет абстрагироваться от различных интерфейсов баз данных,
 представляя их как именованные *источники данных*, подключаемые к *моделям*.
 представляя их как именованные *источники данных*, подключаемые к *моделям*.
@@ -109,7 +109,7 @@ flowchart TD
   G-->K
   G-->K
 ```
 ```
 
 
-## Пример
+# Пример
 
 
 Объявление источника данных, модели и добавление нового документа в коллекцию.
 Объявление источника данных, модели и добавление нового документа в коллекцию.
 
 
@@ -154,7 +154,7 @@ console.log(country);
 // }
 // }
 ```
 ```
 
 
-## Схема
+# Схема
 
 
 Экземпляр класса `DatabaseSchema` хранит определения источников данных и моделей.
 Экземпляр класса `DatabaseSchema` хранит определения источников данных и моделей.
 
 
@@ -202,7 +202,7 @@ dbs.defineModel({
 const productRep = dbs.getRepository('product');
 const productRep = dbs.getRepository('product');
 ```
 ```
 
 
-## Источник данных
+# Источник данных
 
 
 Источник хранит название выбранного адаптера и его настройки. Определение
 Источник хранит название выбранного адаптера и его настройки. Определение
 нового источника выполняется методом `defineDatasource` экземпляра
 нового источника выполняется методом `defineDatasource` экземпляра
@@ -238,7 +238,7 @@ dbs.defineDatasource({
 });
 });
 ```
 ```
 
 
-## Модель
+# Модель
 
 
 Описывает структуру документа коллекции и связи к другим моделям. Определение
 Описывает структуру документа коллекции и связи к другим моделям. Определение
 новой модели выполняется методом `defineModel` экземпляра `DatabaseSchema`.
 новой модели выполняется методом `defineModel` экземпляра `DatabaseSchema`.
@@ -266,7 +266,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-## Свойства
+# Свойства
 
 
 Параметр `properties` находится в определении модели и принимает объект, ключи
 Параметр `properties` находится в определении модели и принимает объект, ключи
 которого являются свойствами этой модели, а значением тип свойства или объект
 которого являются свойствами этой модели, а значением тип свойства или объект
@@ -373,14 +373,14 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-## Валидаторы
+# Валидаторы
 
 
 Валидаторы используются для проверки значения свойства перед записью в базу.
 Валидаторы используются для проверки значения свойства перед записью в базу.
 Проверка значения валидатором выполняется сразу после проверки типа, указанного
 Проверка значения валидатором выполняется сразу после проверки типа, указанного
 в определении свойства модели. [Пустые значения](#пустые-значения) пропускают
 в определении свойства модели. [Пустые значения](#пустые-значения) пропускают
 проверку валидаторами, так как не имеют полезной нагрузки.
 проверку валидаторами, так как не имеют полезной нагрузки.
 
 
-### Глобальные валидаторы
+## Глобальные валидаторы
 
 
 Модуль поставляется с набором глобальных валидаторов:
 Модуль поставляется с набором глобальных валидаторов:
 
 
@@ -470,7 +470,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-### Регистрация глобальных валидаторов
+## Регистрация глобальных валидаторов
 
 
 Валидатором является функция, в которую передается значение соответствующего
 Валидатором является функция, в которую передается значение соответствующего
 поля перед записью в базу. Если во время проверки функция возвращает `false`,
 поля перед записью в базу. Если во время проверки функция возвращает `false`,
@@ -570,7 +570,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-### Локальные валидаторы
+## Локальные валидаторы
 
 
 Функция-валидатор может быть передана непосредственно в определении свойства
 Функция-валидатор может быть передана непосредственно в определении свойства
 без предварительной регистрации. Для этого достаточно передать функцию
 без предварительной регистрации. Для этого достаточно передать функцию
@@ -648,14 +648,14 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-## Трансформеры
+# Трансформеры
 
 
 Трансформеры используются для модификации значения свойства перед проверкой
 Трансформеры используются для модификации значения свойства перед проверкой
 типа и передачей данных в базу. Трансформеры позволяют автоматически очищать
 типа и передачей данных в базу. Трансформеры позволяют автоматически очищать
 или приводить данные к нужному формату. [Пустые значения](#Пустые-значения)
 или приводить данные к нужному формату. [Пустые значения](#Пустые-значения)
 не передаются в трансформеры, так как не имеют полезной нагрузки.
 не передаются в трансформеры, так как не имеют полезной нагрузки.
 
 
-### Глобальные трансформеры
+## Глобальные трансформеры
 
 
 Модуль поставляется с набором глобальных трансформеров:
 Модуль поставляется с набором глобальных трансформеров:
 
 
@@ -744,7 +744,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-### Регистрация глобальных трансформеров
+## Регистрация глобальных трансформеров
 
 
 Трансформером является функция, которая принимает значение свойства и возвращает
 Трансформером является функция, которая принимает значение свойства и возвращает
 новое значение. Функция может быть как синхронной, так и асинхронной (возвращать
 новое значение. Функция может быть как синхронной, так и асинхронной (возвращать
@@ -797,7 +797,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-### Локальные трансформеры
+## Локальные трансформеры
 
 
 Функция-трансформер может быть передана непосредственно в определении свойства без предварительной регистрации. Для этого достаточно передать функцию в параметр `transform` в качестве значения или элемента массива.
 Функция-трансформер может быть передана непосредственно в определении свойства без предварительной регистрации. Для этого достаточно передать функцию в параметр `transform` в качестве значения или элемента массива.
 
 
@@ -889,7 +889,7 @@ dbs.defineModel({
 ```
 ```
 
 
 
 
-## Пустые значения
+# Пустые значения
 
 
 Разные типы свойств имеют свои наборы пустых значений. Эти наборы
 Разные типы свойств имеют свои наборы пустых значений. Эти наборы
 используются для определения наличия полезной нагрузки в значении
 используются для определения наличия полезной нагрузки в значении
@@ -908,7 +908,7 @@ dbs.defineModel({
 | `'array'`   | `undefined`, `null`, `[]` |
 | `'array'`   | `undefined`, `null`, `[]` |
 | `'object'`  | `undefined`, `null`, `{}` |
 | `'object'`  | `undefined`, `null`, `{}` |
 
 
-### Переопределение пустых значений
+## Переопределение пустых значений
 
 
 Набор пустых значений для любого типа данных можно переопределить. Управление
 Набор пустых значений для любого типа данных можно переопределить. Управление
 этими наборами осуществляется через специальный сервис, который предоставляет
 этими наборами осуществляется через специальный сервис, который предоставляет
@@ -964,7 +964,7 @@ emptyValuesService.setEmptyValuesOf(DataType.NUMBER, [undefined, null]);
 считаться пустым и будет проходить проверки валидаторами, а также не будет
 считаться пустым и будет проходить проверки валидаторами, а также не будет
 заменяться значением по умолчанию.
 заменяться значением по умолчанию.
 
 
-## Репозиторий
+# Репозиторий
 
 
 Выполняет операции чтения и записи документов определенной модели.
 Выполняет операции чтения и записи документов определенной модели.
 Получить репозиторий можно методом `getRepository` экземпляра `DatabaseSchema`.
 Получить репозиторий можно методом `getRepository` экземпляра `DatabaseSchema`.
@@ -1036,7 +1036,7 @@ const res = await countryRep.deleteById(1);
 console.log(res); // true
 console.log(res); // true
 ```
 ```
 
 
-## Фильтрация
+# Фильтрация
 
 
 Некоторые методы репозитория принимают объект настроек влияющий
 Некоторые методы репозитория принимают объект настроек влияющий
 на возвращаемый результат. Максимально широкий набор таких настроек
 на возвращаемый результат. Максимально широкий набор таких настроек
@@ -1110,7 +1110,7 @@ const userProfile = await userRepository.findOne({
 });
 });
 ```
 ```
 
 
-### where
+## where
 
 
 Параметр принимает объект с условиями выборки и поддерживает широкий
 Параметр принимает объект с условиями выборки и поддерживает широкий
 набор операторов сравнения.
 набор операторов сравнения.
@@ -1159,7 +1159,86 @@ const res = await rep.delete({
 });
 });
 ```
 ```
 
 
-### order
+### Операторы сопоставления с шаблоном
+
+Операторы `like`, `nlike`, `ilike`, `nilike` предназначены для фильтрации
+строковых свойств на основе сопоставления с шаблоном, подобно оператору
+`LIKE` в SQL. Они позволяют находить значения, которые соответствуют
+определённой структуре, используя специальные символы.
+
+**`%`** соответствует любой последовательности из нуля или более символов:
+
+- `'А%'` найдет все строки, начинающиеся на "А";  
+- `'%а'` найдет все строки, заканчивающиеся на "а";  
+- `'%слово%'` найдет все строки, содержащие "слово" в любом месте;
+
+**`_`** соответствует ровно одному любому символу:
+
+- `'к_т'` найдет "кот", "кит", но не "крот" или "кт";
+- `'кот_'` найдет "коты", "коту" и "кота", но не "кот" или "котов";
+
+Если нужно найти сами символы `%` или `_` как часть строки, их необходимо
+экранировать с помощью обратного слэша `\`:
+
+- `'100\%'` найдет строку "100%";
+- `'file\_name'` найдет строку "file_name";
+- `'path\\to'` найдет строку "path\to";
+
+#### Описание операторов
+
+##### `like`
+
+Выполняет сопоставление с шаблоном **с учетом регистра**.
+
+```javascript
+// Найдет {name: 'John Doe'}, но не {name: 'john doe'}
+const filter = {
+  where: {
+    name: {like: 'John%'},
+  },
+};
+```
+
+##### `nlike` (NOT LIKE)
+
+Противоположность `like`. Находит строки, которые **не соответствуют** шаблону, **с учетом регистра**.
+
+```javascript
+// Найдет все, кроме тех, что начинаются на 'John'
+const filter = {
+  where: {
+    name: {nlike: 'John%'},
+  },
+};
+```
+
+##### `ilike` (ILIKE)
+
+Выполняет сопоставление с шаблоном **без учета регистра** (case-**i**nsensitive).
+
+```javascript
+// Найдет {name: 'John Doe'} и {name: 'john doe'}
+const filter = {
+  where: {
+    name: {ilike: 'john%'},
+  },
+};
+```
+
+##### `nilike` (NOT ILIKE)
+
+Противоположность `ilike`. Находит строки, которые **не соответствуют** шаблону, **без учета регистра**.
+
+```javascript
+// Найдет все, кроме тех, что начинаются на 'John' или 'john'
+const filter = {
+  where: {
+    name: {nilike: 'john%'},
+  },
+};
+```
+
+## order
 
 
 Параметр упорядочивает выборку по указанным свойствам модели. Обратное
 Параметр упорядочивает выборку по указанным свойствам модели. Обратное
 направление порядка можно задать постфиксом `DESC` в названии свойства.
 направление порядка можно задать постфиксом `DESC` в названии свойства.
@@ -1196,7 +1275,7 @@ const res = await rep.find({
 
 
 *i. Направление порядка `ASC` указывать необязательно.*
 *i. Направление порядка `ASC` указывать необязательно.*
 
 
-### include
+## include
 
 
 Параметр включает связанные документы в результат вызываемого метода.
 Параметр включает связанные документы в результат вызываемого метода.
 Названия включаемых связей должны быть определены в текущей модели.
 Названия включаемых связей должны быть определены в текущей модели.
@@ -1252,7 +1331,7 @@ const res = await rep.find({
 });
 });
 ```
 ```
 
 
-## Связи
+# Связи
 
 
 Связи позволяют описывать отношения между моделями, что дает возможность
 Связи позволяют описывать отношения между моделями, что дает возможность
 автоматически встраивать связанные данные с помощью опции `include`
 автоматически встраивать связанные данные с помощью опции `include`
@@ -1283,7 +1362,7 @@ console.log(user);
 // }
 // }
 ```
 ```
 
 
-### Определение связи
+## Определение связи
 
 
 Свойство `relations` в определении модели принимает объект, ключи которого
 Свойство `relations` в определении модели принимает объект, ключи которого
 являются названиями связей, а значения их параметрами. В дальнейшем название
 являются названиями связей, а значения их параметрами. В дальнейшем название
@@ -1466,7 +1545,7 @@ dbs.defineModel({
 });
 });
 ```
 ```
 
 
-## Расширение
+# Расширение
 
 
 Метод `getRepository` экземпляра `DatabaseSchema` проверяет наличие
 Метод `getRepository` экземпляра `DatabaseSchema` проверяет наличие
 существующего  репозитория для указанной модели и возвращает его.
 существующего  репозитория для указанной модели и возвращает его.
@@ -1512,7 +1591,7 @@ console.log(rep instanceof MyRepository); // true
 *i. Так как экземпляры репозитория кэшируется, то замену конструктора
 *i. Так как экземпляры репозитория кэшируется, то замену конструктора
 следует выполнять до обращения к методу `getRepository`.*
 следует выполнять до обращения к методу `getRepository`.*
 
 
-## TypeScript
+# TypeScript
 
 
 Получение типизированного репозитория с указанием интерфейса модели.
 Получение типизированного репозитория с указанием интерфейса модели.
 
 
@@ -1555,12 +1634,12 @@ interface City {
 const cityRep = dbs.getRepository<City, number>('city');
 const cityRep = dbs.getRepository<City, number>('city');
 ```
 ```
 
 
-## Тесты
+# Тесты
 
 
 ```bash
 ```bash
 npm run test
 npm run test
 ```
 ```
 
 
-## Лицензия
+# Лицензия
 
 
 MIT
 MIT