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?

o inicia sesión.

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'
        	},
	}
}

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

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

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.