|
|
@@ -2,11 +2,6 @@
|
|
|
|
|
|
Абстракция для работы с базами данных для Node.js
|
|
|
|
|
|
-| адаптер | описание |
|
|
|
-|---------|-------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
|
-| memory | виртуальная база в памяти процесса (для разработки и тестирования) |
|
|
|
-| mongodb | MongoDB - система управления NoSQL базами данных (*[требует установки](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* |
|
|
|
-
|
|
|
## Установка
|
|
|
|
|
|
```bash
|
|
|
@@ -22,6 +17,13 @@ npm install @e22m4u/js-repository
|
|
|
npm install @e22m4u/js-repository-mongodb-adapter
|
|
|
```
|
|
|
|
|
|
+Список доступных адаптеров:
|
|
|
+
|
|
|
+| адаптер | описание |
|
|
|
+|---------|-------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
|
+| memory | виртуальная база в памяти процесса (для разработки и тестирования) |
|
|
|
+| mongodb | MongoDB - система управления NoSQL базами данных (*[требует установки](https://www.npmjs.com/package/@e22m4u/js-repository-mongodb-adapter))* |
|
|
|
+
|
|
|
## Концепция
|
|
|
|
|
|
Модуль позволяет спроектировать систему связанных данных, доступ к которым
|
|
|
@@ -87,8 +89,9 @@ schema.defineDatasource({
|
|
|
какого-либо объекта, так и являться отражением реальной коллекции базы.
|
|
|
|
|
|
Представьте себе коллекцию торговых точек, у каждой из которых имеются
|
|
|
-координаты `lat` и `lng`. Мы могли бы заранее определить модель для
|
|
|
-объекта координат, и использовать его в других коллекциях.
|
|
|
+координаты `lat` и `lng`. Мы можем заранее определить модель для
|
|
|
+объекта координат методом `defineModel` и использовать ее в других
|
|
|
+коллекциях.
|
|
|
|
|
|
```js
|
|
|
schema.defineModel({
|
|
|
@@ -100,10 +103,37 @@ schema.defineModel({
|
|
|
});
|
|
|
```
|
|
|
|
|
|
+Параметр `properties` принимает объект, ключи которого являются именами
|
|
|
+полей, а значением тип поля или объект с дополнительными параметрами.
|
|
|
+
|
|
|
+```js
|
|
|
+schema.defineModel({
|
|
|
+ name: 'latLng',
|
|
|
+ properties: {
|
|
|
+ lat: DataType.NUMBER, // краткое определение поля "lat"
|
|
|
+ lng: { // определение поля "lng" с параметром "required"
|
|
|
+ type: DataType.NUMBER,
|
|
|
+ required: true, // исключает null и undefined
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
+Типы данных:
|
|
|
+
|
|
|
+| enum | значение |
|
|
|
+|--------------------|-------------|
|
|
|
+| `DataType.ANY` | `"any"` |
|
|
|
+| `DataType.STRING` | `"string"` |
|
|
|
+| `DataType.NUMBER` | `"number"` |
|
|
|
+| `DataType.BOOLEAN` | `"boolean"` |
|
|
|
+| `DataType.ARRAY` | `"array"` |
|
|
|
+| `DataType.OBJECT` | `"object"` |
|
|
|
+
|
|
|
Модель `latLng` всего лишь описывает структуру объекта координат, тогда
|
|
|
как торговая точка должна иметь реальную таблицу в базе. По аналогии с
|
|
|
-предыдущим примером, добавим модель `place`, но укажем не только название
|
|
|
-модели и ее поля, а еще и источник данных в параметре `datasource`
|
|
|
+предыдущим примером, добавим модель `place`, но дополнительно укажем
|
|
|
+источник данных в параметре `datasource`
|
|
|
|
|
|
```js
|
|
|
schema.defineModel({
|