Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Validación de esquema

Especifica el nivel de validación para los documentos existentes

Para los documentos que ya existen en tu colección antes de añadir validación, puedes especificar cómo MongoDB aplica las reglas de validación a estos documentos.

De 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 en esta página utilizan una colección contacts con los siguientes 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"
} )

Como el validationLevel es strict, cuando se actualiza cualquier documento, MongoDB verifica la validación de ese documento.

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 la siguiente salida 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"
} )

Debido a que el validationLevel es moderate:

  • Si actualizas 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 actualizas el documento con _id: 2, MongoDB no aplica las nuevas reglas de validación porque el documento existente no se ajusta a 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 es exitosa para el documento con _id: 2. Este documento no cumplió con los requisitos de validación iniciales, y MongoDB no aplica las reglas de validación a este documento.

Importante

La salida de errores está destinada al uso humano. Podría cambiar en el futuro y no debe dependerse de ello en scripts.

  • Elija Cómo gestionar Documentos Inválidos

  • Modifique la validación de esquema

Volver

Especificar operadores del query

En esta página