Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

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 que MongoDB aplica reglas de validación:

Nivel de validación
Comportamiento

strict

(Por defecto) 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 tanto a la inserción de documentos como a la actualización de documentos válidos existentes que cumplan con las reglas de validación. No se requiere que las actualizaciones de documentos existentes en la colección que no cumplan con las reglas de validación pasen 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 exige que name sea una string:

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 exige que name sea una string:

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 cumple los requisitos de validación inicial y MongoDB aplica reglas de validación a este documento.

  • 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