No tienes acceso a esta clase

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

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
3 Hrs
54 Min
19 Seg

Validando strings

7/22
Recursos

Aportes 12

Preguntas 3

Ordenar por:

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

Les dejo mi definición con validaciones regex del email, para asegurar que es un email, y password, para asegurar que tiene un tamaño de 16 a 40 caracteres.

db.createCollection('users', {
    validator: {
        $jsonSchema: {
            bsonType: 'object',
            required: ['email', 'password'],
            properties: {
                name: {
                    bsonType: 'string'
                },
                last_name: {
                    bsonType: 'string'
                },
                email: {
                    bsonType: 'string',
                    pattern: "^[A-Za-z\d.-]{1,}@[A-Za-z\d.-]{1,}[.]{1}[A-Za-z\d.-]{1,}$"
                },
                password: {
                    bsonType: 'string',
                    pattern: "^.{16,40}$"
                }
            }
        }
    }
})

collecion.mongodb

use("platzi_store")

db.createCollection('users',{
  validator: {
    $jsonSchema:{
      bsonType: 'object',
      required: ['email','password'],
      properties:{
        name:{
          bsonType:'string'
        },
        last_name:{
          bsonType:'string'
        },
        email:{
          bsonType:'string'
        },
        password:{
          bsonType:'string'
        }
      }
    }
  }
})

Validacion de datos

Hay que realizar validacion de datos para la integridad de la informacion.

MongoDB es muy flexible, como tambien otras bases de datos noSQL basadas en documentos.

Pero hay que respetar ciertas reglas de negocio. Y tambien las entidades tienen ciertas reglas de negocio que hay que respetar.

Crear una colleccion

Primero, hay dos formas de crear una coleccion:

  1. Implicitamente: Donde al crear datos, esta es creada. Usando un:
    use ("nueva_db")
    db.nueva_coleccion.insertOne({...})
    
  2. Explicitamente: Donde se le dice que cree una nueva coleccion. Que ademas se le pueden dar parametros, como las validaciones. Se hace con:
    use ("nueva_db")
    db.createCollection(
        'nueva_coleccion', 
        {
            validator: 
            {...}
        }
    )
    

Operadores

Validacion

validator: {
    $jsonSchema: {
        bsonType: 'object', // Los documentos que se inserten seran objetos
        required: ['email', 'password'], // requeridos / obligatorios
        properties: { // Como seran las propiedades de esos objetos
            name: {
                bsonType: 'string'
            },
            email: { // propiedad
                bsonType: 'string', // tipo
                pattern: "^[A-Za-z\d.-]{1,}@[A-Za-z\d.-]{1,}[.]{1}[A-Za-z\d.-]{1,}$" // patron
            },
            password: {
                bsonType: 'string',
                pattern: "^.{16,40}$"
            }
        }
    }
}

Tipos de datos

BSON es un formato de serialización binaria que se utiliza para almacenar documentos y realizar llamadas a procedimientos remotos en MongoDB. La especificación BSON se encuentra en bsonspec.org/.

Y la referencia de mongoDB con los tipos Bson son:
https://www.mongodb.com/docs/manual/reference/bson-types/

Drop

Para eliminar documentos y esquemas

use("platzi_store")
db.users.drop() // Elimina documentos y esquemas

Validando Strings

Para validar un string se requiere usar el bsontype de tipo string. Pero solo con eso tambien acepta que no exista, por ello hay que agregarlo al required.

use("platzi_store");

db.createCollection('users', {
    validator: {
        $jsonSchema: {
            bsonType: 'object',
            required: ['name'], // obligatorio
            properties: { 
                name: { 
                    bsonType: 'string' // tipo de objeto string
                }
            }
        }
    }
})

Usualmente los frameworks para backend permiten hacer validaciones a nivel de aplicación. FastAPI (Framework Python), por ejemplo, realiza la validación de esquemas con Pydantic.

Junto a la validación de MongoDB tendríamos 2 formas de validar los campos, una a nivel de aplicación y otra a nivel de base de datos.

collection.mongodb

use("platzi_store")

db.createCollection("users", {
    validator: {
        $jsonSchema: {
            bsonType: 'object',
            required: ['name', 'lastname', 'email', 'password'],
            properties: {
                name: {
                    bsonType: 'string',
                    description: "'name' must be a string and is required"
                },
                lastname: {
                    bsonType: 'string',
                    description: "'lastname' must be a string and is required"
                },
                email: {
                    bsonType: 'string',
                    description: "'email' must be a string and is required"
                },
                password: {
                    bsonType: 'string',
                    description: "'password' must be a string and is required"
                }
            }
        }
    }
})```
Hola Chicos \nComo todos han subido su aporte, \nLuego Yo tambien subo el mio para futuros Mongoers en este curso . ```css use("CustomersDataStorage") db.createCollection('Users', { validator: { $jsonSchema: { bsonType: 'object', required: ['firstName', 'lastName', 'email', 'password', 'gender'], // Corrección aquí properties: { firstName: { bsonType: 'string' }, lastName: { bsonType: 'string' }, email: { bsonType: 'string', pattern: "^[A-Za-z\\d._%+-]+@[A-Za-z\\d.-]+\\.[A-Za-z]{2,}$" // Ajuste menor al patrón }, password: { bsonType: 'string', pattern: "^.{16,40}$" // Ya está correcto }, Age: { bsonType: 'int' }, Nation: { bsonType: 'string' }, Gender: { bsonType: 'bool', description : " Please Provide 1 if it is Male\n and 0 is Female" } } } } }) db.Users.insertOne( { firstName : "Carlos", lastName : "DuBois", email : "[email protected]", password : "Mcarlosgarcia13579", Age : 24, Nation : "Colombia", Gender : true }) ```use("CustomersDataStorage") db.createCollection('Users', { validator: { $jsonSchema: { bsonType: 'object', required: \['firstName', 'lastName', 'email', 'password', 'gender'], // Corrección aquí properties: { firstName: { bsonType: 'string' }, lastName: { bsonType: 'string' }, email: { bsonType: 'string', pattern: "^\[A-Za-z\\\d.\_%+-]+@\[A-Za-z\\\d.-]+\\\\.\[A-Za-z]{2,}$" // Ajuste menor al patrón }, password: { bsonType: 'string', pattern: "^.{16,40}$" // Ya está correcto }, Age: { bsonType: 'int' }, Nation: { bsonType: 'string' }, Gender: { bsonType: 'bool', description : " Please Provide 1 if it is Male\n and 0 is Female" } } } }}) db.Users.insertOne( { firstName : "Carlos", lastName : "DuBois", email : "carlos\[email protected]", password : "Mcarlosgarcia13579", Age : 24, Nation : "Colombia", Gender : true })
Para modificar la estructura de un esquema en MongoDB sin borrarlo, puedes usar el método `collMod`. Este comando permite cambiar el validador de una colección, ajustar índices y más sin necesidad de eliminar la colección. Por ejemplo: ```javascript db.runCommand({ collMod: "users", validator: { $jsonSchema: { bsonType: "object", required: ["email", "password"], properties: { email: { bsonType: "string" }, password: { bsonType: "string" }, lastName: { bsonType: "string", description: "optional" } } } } }); ``` Esto ajusta el esquema existente sin perder datos.

El schema validation de mongo es bastante poderso y útil para ciertas situaciones. Aquí les dejo el link a la documentación si quieren profundizar mucho más en el tema https://www.mongodb.com/docs/manual/core/schema-validation/

Por si tenía la duda de: “¿Y que pasa si ya cree mi jsonSchema y después añado más campos y/o quiero editar mis validaciones?”

Pues si es posible hacerlo haciendo uso de collMod

NO existe alguna forma por medio de código de actualizar el esquema sin necesidad de borrarlo

Esto es algo parecido a lo que nos aporta Mongoose?

Validación de datos

La validación de los datos nos va a permitir garantizar la integridad de la información. Dicha validación se lleva a cabo a través del uso de esquemas (Schemas) de MongoDB que nos permiten definir las propiedades que tendrá nuestra colección así como el tipo de datos de cada una de ellas.

Además de especificar el tipo de cada propiedad, también podemos indicar si un atributo es obligatorio con el fin de garantizar que en la estructura de los datos siempre esté presente

Validando strings

La validación de textos lo haremos definiendo la propiedad tipo string el cual nos dirá que ese campo solo admitirá valores de tipo texto

db.createCollection("users", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["email", "password"],
      properties: {
        name: {
          bsonType: "string",
        },
        last_name: {
          bsonType: "string",
        },
        email: {
          bsonType: "string",
        },
        password: {
          bsonType: "string",
        },
      },
    },
  },
});