Docs Menu
Docs Home
/ /

Specify JSON Schema Validation

JSON Schema es un vocabulario que te permite anotar y validar documentos JSON. Utiliza JSON Schema para especificar reglas de validación para tus campos en un formato legible para humanos.

MongoDB admite el borrador 4 de JSON Schema, incluidos especificación central y especificación de validación, con algunas diferencias. Para más detalles, consulte Extensiones y Omisiones.

Para obtener más información sobre JSON Schema, consulta el sitio web oficial.

No puedes especificar la validación del esquema para:

  • Colecciones en el adminlocal, y config bases de datos

  • Colecciones del sistema

Si tiene Cifrado a nivel de campo del lado del cliente o Queryable Encryption habilitado en una colección, la validación está sujeta a las siguientes restricciones:

  • Para CSFLE, al ejecutar collMod, la librería libmongocrypt prioriza el esquema de cifrado JSON especificado en el comando. Esta preferencia permite establecer un esquema en una colección que aún no lo tenga.

  • Para Queryable Encryption, cualquier JSON schema que incluya un campo cifrado resulta en un error de análisis de query.

En este ejemplo, se crea una colección students con reglas de validación y se pueden observar los resultados después de intentar insertar un documento no válido.

1

Para conectarse a una instancia local de MongoDB o a una implementación de MongoDB Atlas mediante mongosh, consulta Conectar a una implementación o conectarse vía mongosh.

2

En mongosh, ejecute el siguiente comando para crear una colección students y use el operador $jsonSchema para establecer reglas de validación de esquema:

db.createCollection("students", {
validator: {
$jsonSchema: {
bsonType: "object",
title: "Student Object Validation",
required: [ "address", "major", "name", "year" ],
properties: {
name: {
bsonType: "string",
description: "'name' must be a string and is required"
},
year: {
bsonType: "int",
minimum: 2017,
maximum: 3017,
description: "'year' must be an integer in [ 2017, 3017 ] and is required"
},
gpa: {
bsonType: [ "double" ],
description: "'gpa' must be a double if the field exists"
}
}
}
}
} )

Tip

Aclara las reglas con los campos de título y descripción

Usa los campos title y description para explicar las reglas de validación que no sean inmediatamente claras. Cuando un documento no supera la validación, MongoDB incluye estos campos en el resultado de error.

3

Si cambia el valor del campo gpa a un tipo double, la operación de inserción se realiza con éxito. Ejecute el siguiente comando para insertar el documento válido:

db.students.insertOne( {
name: "Alice",
year: Int32( 2019 ),
major: "History",
gpa: Double( 3.0 ),
address: {
city: "NYC",
street: "33rd Street"
}
} )

Nota

Si intentas insertar un documento inválido, MongoDB devuelve un error.

4

Para confirmar que has insertado correctamente el documento, ejecuta el siguiente comando para el query de la colección students:

db.students.find()
[
{
_id: ...,
name: 'Alice',
year: 2019,
major: 'History',
gpa: 3,
address: {
city: 'NYC',
street: '33rd Street'
}
}
]

Tip

Si estás conectado a una implementación de Atlas, también puedes ver y filtrar el documento en la Interfaz de usuario de Atlas.

Puedes combinar la validación de esquema JSON con la validación del operador del query.

Por ejemplo, considere una colección sales con esta validación de esquema:

db.createCollection("sales", {
validator: {
"$and": [
// Validation with query operators
{
"$expr": {
"$lt": ["$lineItems.discountedPrice", "$lineItems.price"]
}
},
// Validation with JSON Schema
{
"$jsonSchema": {
"properties": {
"items": { "bsonType": "array" }
}
}
}
]
}
}
)

La validación anterior aplica estas reglas para los documentos de la colección sales:

  • lineItems.discountedPrice debe ser menor de lineItems.price. Esta regla utiliza el operador $lt.

  • El campo items debe ser un arreglo. Esta regla utiliza $jsonSchema.

Volver

Validación de esquema

Obtén una insignia de habilidad

Domine "Patrones y antipatrones avanzados de esquemas" de forma gratuita.

Más información

En esta página