Docs Menu
Docs Home
/ /
Validación de esquema

Especificar el nivel de validación para los documentos existentes

Para los documentos que ya existen en su colección antes de agregar la validación, puede especificar cómo MongoDB aplica las reglas de validación a estos documentos.

Tu esquema validationLevel determina los documentos para los cuales MongoDB aplica reglas de validación:

Nivel de validación
Comportamiento

strict

(Predeterminado) MongoDB aplica las mismas reglas de validación a todas las inserciones y actualizaciones de documentos.

moderate

MongoDB aplica las mismas reglas de validación a las inserciones y actualizaciones de documentos válidos existentes que cumplen con dichas reglas. Las actualizaciones de documentos existentes en la colección que no cumplen con dichas reglas no requieren la validación.

Los ejemplos de esta página utilizan una colección contacts con estos documentos:

db.contacts.insertMany([
{ "_id": 1, "name": "Anne", "phone": "+1 555 123 456", "city": "London", "status": "Complete" },
{ "_id": 2, "name": "Ivan", "city": "Vancouver" }
])

El siguiente ejemplo añade una validación strict a la colección contacts y muestra los resultados cuando se intenta actualizar documentos no válidos.

1

Agregue un validador a la colección contacts con strict validationLevel:

db.runCommand( {
collMod: "contacts",
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone", "name" ],
properties: {
phone: {
bsonType: "string",
description: "phone must be a string and is required"
},
name: {
bsonType: "string",
description: "name must be a string and is required"
}
}
} },
validationLevel: "strict"
} )

Debido a que validationLevel es strict, cuando se actualiza cualquier documento, MongoDB verifica ese documento para su validación.

2

Los siguientes comandos de actualización modifican ambos documentos en la colección contacts de modo que ninguno de los documentos sea consistente con la regla de validación que requiere que name sea una cadena:

db.contacts.updateOne(
{ _id: 1 },
{ $set: { name: 10 } }
)
db.contacts.updateOne(
{ _id: 2 },
{ $set: { name: 20 } }
)
3

Ambas operaciones de actualización fallan. MongoDB devuelve el siguiente resultado para cada operación:

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: <id>,
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'name',
description: 'name must be a string and is required',
details: [
{
operatorName: 'bsonType',
specifiedAs: { bsonType: 'string' },
reason: 'type did not match',
consideredValue: <value>,
consideredType: 'int'
}
]
}
]
},
{
operatorName: 'required',
specifiedAs: { required: [ 'phone', 'name' ] },
missingProperties: [ 'phone' ]
}
]
}
}

El siguiente ejemplo añade una validación moderate a la colección contacts y muestra los resultados cuando se intenta actualizar documentos no válidos.

1

Agregue un validador a la colección contacts con moderate validationLevel:

db.runCommand( {
collMod: "contacts",
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone", "name" ],
properties: {
phone: {
bsonType: "string",
description: "phone must be a string and is required"
},
name: {
bsonType: "string",
description: "name must be a string and is required"
}
}
} },
validationLevel: "moderate"
} )

Porque el validationLevel es moderate:

  • Si actualiza el documento con _id: 1, MongoDB aplica las nuevas reglas de validación porque el documento existente cumple con los requisitos de validación.

  • Si actualiza el documento con _id: 2, MongoDB no aplica las nuevas reglas de validación porque el documento existente no cumple con los requisitos de validación.

2

Los siguientes comandos de actualización modifican ambos documentos en la colección contacts de modo que ninguno de los documentos sea consistente con la regla de validación que requiere que name sea una cadena:

db.contacts.updateOne(
{ _id: 1 },
{ $set: { name: 10 } }
)
db.contacts.updateOne(
{ _id: 2 },
{ $set: { name: 20 } }
)
3

MongoDB devuelve la siguiente salida para cada operación:

// _id: 1
MongoServerError: Document failed validation
Additional information: {
failingDocumentId: 1,
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'name',
description: 'name must be a string and is required',
details: [
{
operatorName: 'bsonType',
specifiedAs: { bsonType: 'string' },
reason: 'type did not match',
consideredValue: 10,
consideredType: 'int'
}
]
}
]
}
]
}
}
// _id: 2
{
acknowledged: true,
insertedId: null,
matchedCount: 1,
modifiedCount: 0,
upsertedCount: 0
}

La salida muestra:

  • La actualización falla para el documento con _id: 1. Este documento cumplió con los requisitos de validación iniciales y MongoDB le aplica reglas de validación.

  • La actualización del documento con _id: 2 se realizó correctamente. Este documento no cumplió con los requisitos de validación iniciales y MongoDB no le aplica reglas de validación.

Importante

La salida de error es para uso humano. Puede cambiar en el futuro y no debe utilizarse en scripts.

  • Elija cómo gestionar los documentos no válidos

  • Modifique la validación de esquema

Volver

Especificar operadores del query

En esta página