No tienes acceso a esta clase

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

Tips para validación en MongoDB

11/22
Recursos

Aportes 4

Preguntas 2

Ordenar por:

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

APUNTES
Tips para validacion en MongoDB

https://www.mongodb.com/docs/v6.0/core/schema-validation/specify-json-schema/json-schema-tips/#tips-for-json-schema-validation

Quitar la flexibilidad a mongo

Para quitar la posibilidad de que aparescan propiedades adicionales en un documento que no esten especificadas.

Esto se logra agregando: additionalProperties: false

$jsonSchema: {
    bsonType: 'object',
    required: ['email', 'password', 'role'],
    additionalProperties: false, // quitar flexibilidad
    properties: {...}

De Christian Gonzalo:
Algo que no mencionó Nicolas, es que cuando se coloca la propiedad additionalProperties en false, también se debe agregar obligatoriamente la propiedad _id en el array de required y además validarlo en properties. De lo contrario Mongo no permitirá la inserción de documentos, así tengan la estructura correcta.

$jsonSchema: {
	required: ['_id','email', 'password', 'role'],
	additionalProperties: false,
	properties: {
        _id: {
            bsonType: 'objectId'
        },
	}
}

Reajustar el esquema sin borrar

Primero, para ver la informacion de las colecciones:

use("platzi_store");
db.getCollectionInfos();

Actualizar el esquema

Para cambiarlo, hay que enviar toda la definicion del validador porque va a re-escribirlo. Y requiere de un usuario con permisos de administrador en la base de datos.

<h5>Cambiar permisos (Mongo Atlas)</h5>
  1. Ir a la administracion de la base de datos
  2. Ir a Security
  3. Ir a Database Access
  4. Editar/Elevar los permisos del usuario elegido (incluso para el original)
  5. Pasar del Read and write to any database a Atlas admin
  6. Guardar los cambios con Update User
<h5>Comando de actualización</h5>
db.runCommand({
    collMod: 'users', // coleccion a modificar
    validator: { // propiedad de la coleccion a modificar
        $jsonSchema: {
            bsonType: 'object', // igual
            required: ['email', 'password', 'role'], // igual
            additionalProperties: true, // el cambio
            properties: {...} // igual
        }
    }
})

Algo a considerar es que el campo name es diferente de Name

A mi me pasó que agregando el "additionalProperties" en false no me dejaba insertar un dato `use("platzi_store");` `db.getCollection('users').drop();` `db.createCollection('users', {` ` validator: { $jsonSchema: {` ` bsonType: 'object',` ` required: [ 'email', 'password', 'rol' ],` ` additionalProperties: false,` ` properties: {` ` name: {` ` bsonType: 'string',` ` description: 'El nombre debe ser alfa-numerico de 3 a 50 caracteres',` ` maxLength: 50,` ` minLength: 3,` ` pattern: "^[a-zA-ZñÑáéíóúÁÉÍÚÓ\s]+$"` ` },` ` last_name: {` ` bsonType: 'string',` ` description: 'El apellido debe ser alfa-numerico de 3 a 50 caracteres',` ` maxLength: 50,` ` minLength: 3,` ` pattern: "^[a-zA-ZñÑáéíóúÁÉÍÚÓ\s ]+$"` ` },` ` email: {` ` bsonType: 'string',` ` description: 'Email requerido',` ` maxLength: 50,` ` minLength: 5,` ` pattern: "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"` ` },` ` password: {` ` bsonType: 'string',` ` description: 'password requerido',` ` maxLength: 10,` ` minLength: 1,` ` pattern: "^[\\w]+$"` ` },` ` age: {` ` bsonType: 'number',` ` minimum: 18,` ` maximum: 99,` ` pattern: "^[\d]+$"` ` },` ` isSingle: {` ` bsonType: 'bool',` ` },` ` rol: {` ` enum: [ 'admin', 'customer', 'seller', 'guess' ]` ` }` ` }` ` }} ` `});` `use("platzi_store");` `db.users.insertOne({` ` 'email': '[email protected]',` ` 'password': 'asd123',` ` 'rol': 'admin'` `})` `db.users.find();` lo solucioné agregando el \_id como propiedad y con bsonType 'ObjectId'

Si despues de haber elevado los permisos no te deja correr la operacion en VSC solo tienes que ir a la extension de mongo en VSC y darle refresh a la DB.