> For the complete documentation index, see [llms.txt](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/bazy-dannykh/mongoose-schema.md).

# Mongoose Schema

Как писалось ранее, Schema - "строго-типизированное" определение документа определенной коллекции.

Кроме определения типа данных определенного поля, Schema также позволяет установить следующие опции поля:&#x20;

* указать, обязательное поле для документа или нет (required)
* задать значение по умолчанию (default)
* если числовой тип данных или дата - задать минимальное и максимальное значения (min, max)
* если срочный тип - задать приведения значения к нижнему/верхнему регистру перед сохранением (lowercase / uppercase)
* создать кастомную функцию валидации поля (validate)
* создать кастомные геттер и сеттер поля (get, set)
* создать псевдонимы поля (alias)
* задать значение поля, как уникальное всех документов коллекции (unique) и т. д.

Подробнее об опциях схем можно почитать [здесь](https://mongoosejs.com/docs/schematypes.html#schematype-options).

Пример монгус-схемы:

```
const { Schema } = require('mongoose');

const userSchema = new Schema({
    first_name: String,
    email: {
        type: String,
        required: true,
        alias: 'login',
        validate: (value) => value.includes('@'),
        unique: true,
    },
    age: {
        type: Number,
        required: true,
        min: 18,
        max: 95,
    },
    last_name: {
        type: String,
        default: 'Ivanov',
        get: (v) => v.toUpperCase(),
    }
});
```
