Browse Source

chore: updates README.md

e22m4u 1 month ago
parent
commit
bac9b3e1f6
1 changed files with 107 additions and 28 deletions
  1. 107 28
      README.md

+ 107 - 28
README.md

@@ -41,7 +41,7 @@ npm install @e22m4u/js-repository
 | `memory`  | Виртуальная база в памяти процесса (не требует установки)                                                                      |
 | `mongodb` | MongoDB - система управления NoSQL базами (*[установка](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* |
 
-## Импорт
+# Импорт
 
 Модуль поддерживает ESM и CommonJS стандарты.
 
@@ -57,7 +57,7 @@ import {DatabaseSchema} from '@e22m4u/js-repository';
 const {DatabaseSchema} = require('@e22m4u/js-repository');
 ```
 
-## Описание
+# Описание
 
 Модуль позволяет абстрагироваться от различных интерфейсов баз данных,
 представляя их как именованные *источники данных*, подключаемые к *моделям*.
@@ -109,7 +109,7 @@ flowchart TD
   G-->K
 ```
 
-## Пример
+# Пример
 
 Объявление источника данных, модели и добавление нового документа в коллекцию.
 
@@ -154,7 +154,7 @@ console.log(country);
 // }
 ```
 
-## Схема
+# Схема
 
 Экземпляр класса `DatabaseSchema` хранит определения источников данных и моделей.
 
@@ -202,7 +202,7 @@ dbs.defineModel({
 const productRep = dbs.getRepository('product');
 ```
 
-## Источник данных
+# Источник данных
 
 Источник хранит название выбранного адаптера и его настройки. Определение
 нового источника выполняется методом `defineDatasource` экземпляра
@@ -238,7 +238,7 @@ dbs.defineDatasource({
 });
 ```
 
-## Модель
+# Модель
 
 Описывает структуру документа коллекции и связи к другим моделям. Определение
 новой модели выполняется методом `defineModel` экземпляра `DatabaseSchema`.
@@ -266,7 +266,7 @@ dbs.defineModel({
 });
 ```
 
-## Свойства
+# Свойства
 
 Параметр `properties` находится в определении модели и принимает объект, ключи
 которого являются свойствами этой модели, а значением тип свойства или объект
@@ -373,14 +373,14 @@ dbs.defineModel({
 });
 ```
 
-## Валидаторы
+# Валидаторы
 
 Валидаторы используются для проверки значения свойства перед записью в базу.
 Проверка значения валидатором выполняется сразу после проверки типа, указанного
 в определении свойства модели. [Пустые значения](#пустые-значения) пропускают
 проверку валидаторами, так как не имеют полезной нагрузки.
 
-### Глобальные валидаторы
+## Глобальные валидаторы
 
 Модуль поставляется с набором глобальных валидаторов:
 
@@ -470,7 +470,7 @@ dbs.defineModel({
 });
 ```
 
-### Регистрация глобальных валидаторов
+## Регистрация глобальных валидаторов
 
 Валидатором является функция, в которую передается значение соответствующего
 поля перед записью в базу. Если во время проверки функция возвращает `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` в качестве значения или элемента массива.
 
@@ -889,7 +889,7 @@ dbs.defineModel({
 ```
 
 
-## Пустые значения
+# Пустые значения
 
 Разные типы свойств имеют свои наборы пустых значений. Эти наборы
 используются для определения наличия полезной нагрузки в значении
@@ -908,7 +908,7 @@ dbs.defineModel({
 | `'array'`   | `undefined`, `null`, `[]` |
 | `'object'`  | `undefined`, `null`, `{}` |
 
-### Переопределение пустых значений
+## Переопределение пустых значений
 
 Набор пустых значений для любого типа данных можно переопределить. Управление
 этими наборами осуществляется через специальный сервис, который предоставляет
@@ -964,7 +964,7 @@ emptyValuesService.setEmptyValuesOf(DataType.NUMBER, [undefined, null]);
 считаться пустым и будет проходить проверки валидаторами, а также не будет
 заменяться значением по умолчанию.
 
-## Репозиторий
+# Репозиторий
 
 Выполняет операции чтения и записи документов определенной модели.
 Получить репозиторий можно методом `getRepository` экземпляра `DatabaseSchema`.
@@ -1036,7 +1036,7 @@ const res = await countryRep.deleteById(1);
 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` в названии свойства.
@@ -1196,7 +1275,7 @@ const res = await rep.find({
 
 *i. Направление порядка `ASC` указывать необязательно.*
 
-### include
+## include
 
 Параметр включает связанные документы в результат вызываемого метода.
 Названия включаемых связей должны быть определены в текущей модели.
@@ -1252,7 +1331,7 @@ const res = await rep.find({
 });
 ```
 
-## Связи
+# Связи
 
 Связи позволяют описывать отношения между моделями, что дает возможность
 автоматически встраивать связанные данные с помощью опции `include`
@@ -1283,7 +1362,7 @@ console.log(user);
 // }
 ```
 
-### Определение связи
+## Определение связи
 
 Свойство `relations` в определении модели принимает объект, ключи которого
 являются названиями связей, а значения их параметрами. В дальнейшем название
@@ -1466,7 +1545,7 @@ dbs.defineModel({
 });
 ```
 
-## Расширение
+# Расширение
 
 Метод `getRepository` экземпляра `DatabaseSchema` проверяет наличие
 существующего  репозитория для указанной модели и возвращает его.
@@ -1512,7 +1591,7 @@ console.log(rep instanceof MyRepository); // true
 *i. Так как экземпляры репозитория кэшируется, то замену конструктора
 следует выполнять до обращения к методу `getRepository`.*
 
-## TypeScript
+# TypeScript
 
 Получение типизированного репозитория с указанием интерфейса модели.
 
@@ -1555,12 +1634,12 @@ interface City {
 const cityRep = dbs.getRepository<City, number>('city');
 ```
 
-## Тесты
+# Тесты
 
 ```bash
 npm run test
 ```
 
-## Лицензия
+# Лицензия
 
 MIT