No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Validando enums, numbers y booleans

8/22
Recursos

Aportes 4

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Numbers

Tipo de dato numerico, este no requiere comillas y solo acepta numeros. Este tambien puede tener un valor minimo y maximo.

age: {
    bsonType: 'number', // tipo numero
    minimum: 18, // valor minimo
    maximum: 100, // valor maximo
},

Boolean

Tipo de dato booleano, que puede ser verdadero o falso. Pueden recibir: true y false.

isSingle: {
    bsonType: 'bool'
},

Enums

El Enumerador es el tipo de dato que solo acepta una serie de opciones acotadas.
¿Solo Strings? Tambien numeros y booleanos han sido permitidos.

role: {
    enum: ['customer', 'seller', 'admin', 2, false]
},
use("platzi_store");

db.users.drop();

db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "password", "role"],
      properties: {
        name: {
          bsonType: "string",
        },
        last_name: {
          bsonType: "string",
        },
        email: {
          bsonType: "string",
        },
        password: {
          bsonType: "string",
        },
        age: {
          bsonType: "number",
          minimum: 18,
          maximum: 99,
        },
        isSingle: {
          bsonType: "bool",
        },
        role: {
          enum: ["customer", "seller", "admin"],
        },
      },
    },
  },
});

Para generar un patrón que nos valide el email y el password no hay que reinventar la rueda. Simplemente podemos usar los que ya exsisten en la web. En particular ChatGTP nos muestra estos dos:

{
  email: {
    bsonType: "string",
    pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
  },
  password: {
    bsonType: "String",
    pattern: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"
  }
}
use("platzi_store")

db.users.drop()

db.createCollection("users", {
    validator: {
        $jsonSchema: {
            bsonType: 'object',
            required: ['email', 'password', 'role'],
            properties: {
                name: {
                    bsonType: 'string',
                    description: "'name' must be a string and is required"
                },
                last_name: {
                    bsonType: 'string',
                    description: "'lastname' must be a string and is required"
                },
                email: {
                    bsonType: 'string',
                    description: "'email' must be a string and is required",
                    pattern: "^[A-Za-z\\d.-]{1,}@[A-Za-z\\d.-]{1,}[.]{1}[A-Za-z\\d.-]{1,}$"
                },
                password: {
                    bsonType: 'string',
                    description: "'password' must be a string and is required",
                    pattern: "^.{16,40}$"
                },
                age: {
                    bsonType: 'number',
                    minimum: 18,
                    maximum: 99
                },
                isSingle: {
                    bsonType: 'bool'
                },
                role: {
                    enum: ['customer', 'seller', 'admin']
                }
            }
        }
    }
})

use("platzi_store")

db.users.insertOne({
    name: "Juan",
    last_name: "Pérez",
    email: "[email protected]",
    password: "SecurePassword123456",
    role: "customer",
    isSingle: true,
    age: 25
})