Create a schema

A Schema defines the shape of the documents within a collection. It is basically a map of field name to Type.

It contains specs for transforming and validating each fields.

Create

Setup your schema for your collection by creating a new instance of Blini.Schema.

Schema takes only one argument a map of field: String to type: Type.

const { Schema, Type } = require('blini');

const userSchema = new Schema({
    username: Type.String({
        validation: [
            Validation.required(),
            Validation.minLength(3),
            Validation.maxLength(30)
        ],
        index: {
            unique: true
        }
    }),
    books: Type.Set(Type.Ref('Book'), {
        validations: [
            Validation.default([]),
        ]
    })
});

Native types

Native types like String, Number and ObjectID.

Validation

All types (natives and iterables) are taking as last argument a spec of options.

The validation option lets you specify an array of validations functions to use.

See Validations for more details about the helper validation methods (note that a validation can be any function taking a value and retuning the transformed value or throwing an error).

Iterable

Blini doesn't have a type for mixed/object or array, instead it's using immutable data structure: Type.List, Type.Set and Type.Map.

Each of these types take a Type as first argument, it will be used to normalize and validate inner data.

const postSchema = new Schema({
    title: Type.String(),
    body:  Type.String(),
    tags:  Type.Set(Type.String())
});

Sub-documents

Since Schema inherits from Type, you can add schema for shaping sub-documents.

const commentSchema = new Schema({
    author: Type.Ref('Author'),
    body:   Type.String()
});

const postSchema = new Schema({
    title:    Type.String(),
    body:     Type.String(),
    author:   Type.Ref('Author'),
    comments: Type.List(commentSchema)
});

References

Last updated