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

Elija Cómo gestionar Documentos Inválidos

Puede especificar cómo MongoDB gestiona los documentos que infringen las reglas de validación. Cuando una operación genera un documento no válido, MongoDB puede:

  • Rechazar cualquier inserción o actualización que infrinja los criterios de validación. Este es el comportamiento predeterminado.

  • Permitir que la operación continúe, pero registrar la infracción en el registro de MongoDB.

Rechazar documentos no válidos garantiza que tu esquema permanezca coherente. Sin embargo, en ciertos escenarios puede que desee permitir documentos no válidos, como una migración de datos que contenga documentos de antes de que se estableciera un esquema.

De tu esquema validationAction la opción determina cómo MongoDB gestiona los documentos no válidos:

Acción de validación
Comportamiento

error

(Por defecto) MongoDB rechaza cualquier inserción o actualización que viole los criterios de validación.

warn

MongoDB permite que la operación continúe, pero registra la infracción en el registro de MongoDB.

El siguiente procedimiento muestra cómo crear una validación de esquema que rechace documentos no válidos.

1

Cree una colección de contacts con un validador de JSON schema que tenga validationAction: "error":

db.createCollection( "contacts", {
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone" ],
properties: {
phone: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType : "string",
pattern : "@mongodb\\.com$",
description: "must be a string and end with '@mongodb.com'"
}
}
} },
validationAction: "error"
} )

El error validationAction hace que MongoDB rechace cualquier documento inválido y evite que se inserte en la colección.

2

Intente insertar el siguiente documento:

db.contacts.insertOne(
{ name: "Amanda", email: "amanda@xyz.com" }
)

El documento viola la regla de validación porque:

  • El campo email no coincide con el patrón de expresión regular. El campo email debe terminar en @mongodb.com.

  • Falta el campo requerido phone.

La operación falla con el siguiente error:

MongoServerError: Document failed validation
Additional information: {
failingDocumentId: ObjectId("6377cca4aac957f2b77ea955"),
details: {
operatorName: '$jsonSchema',
schemaRulesNotSatisfied: [
{
operatorName: 'properties',
propertiesNotSatisfied: [
{
propertyName: 'email',
description: "must be a string and end with '@mongodb.com'",
details: [
{
operatorName: 'pattern',
specifiedAs: { pattern: '@mongodb\\.com$' },
reason: 'regular expression did not match',
consideredValue: 'amanda@xyz.com'
}
]
}
]
},
{
operatorName: 'required',
specifiedAs: { required: [ 'phone' ] },
missingProperties: [ 'phone' ]
}
]
}
}

El siguiente procedimiento muestra cómo crear una validación de esquema que permite documentos inválidos, pero registra documentos inválidos en el registro de MongoDB.

1

Cree una colección de contacts2 con un validador de JSON schema que tenga validationAction: "warn":

db.createCollection( "contacts2", {
validator: { $jsonSchema: {
bsonType: "object",
required: [ "phone" ],
properties: {
phone: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType : "string",
pattern : "@mongodb\\.com$",
description: "must be a string and end with '@mongodb.com'"
}
}
} },
validationAction: "warn"
} )

El warn validationAction permite insertar documentos no válidos en la colección. Los documentos no válidos se registran en el registro de MongoDB.

2

Intente insertar el siguiente documento:

db.contacts2.insertOne(
{ name: "Amanda", email: "amanda@xyz.com" }
)

El documento viola la regla de validación porque:

  • El campo email no coincide con el patrón de expresión regular. El campo email debe terminar en @mongodb.com.

  • Falta el campo requerido phone.

3

Para ver los registros de MongoDB en un formato legible, ejecute el siguiente comando:

db.adminCommand(
{ getLog:'global'} ).log.forEach(x => { print(x) }
)

El registro de MongoDB incluye una entrada similar al siguiente objeto:

{
"t": {
"$date": "2022-11-18T13:30:43.607-05:00"
},
"s": "W",
"c": "STORAGE",
"id": 20294,
"ctx": "conn2",
"msg": "Document would fail validation",
"attr": {
"namespace": "test.contacts2",
"document": {
"_id": {
"$oid": "6377cf53d59841355cac1cd0"
},
"name": "Amanda",
"email": "amanda@xyz.com"
},
"errInfo": {
"failingDocumentId": {
"$oid": "6377cf53d59841355cac1cd0"
},
"details": {
"operatorName": "$jsonSchema",
"schemaRulesNotSatisfied": [{
"operatorName": "properties",
"propertiesNotSatisfied": [{
"propertyName": "email",
"description": "must be a string and end with '@mongodb.com'",
"details": [{
"operatorName": "pattern",
"specifiedAs": {
"pattern": "@mongodb\\.com$"
},
"reason": "regular expression did not match",
"consideredValue": "amanda@xyz.com"
}]
}]
}, {
"operatorName": "required",
"specifiedAs": {
"required": ["phone"]
},
"missingProperties": ["phone"]
}]
}
}
}
}
  • Mensajes de registro

  • Especifica el nivel de validación para los documentos existentes

Volver

Especifique el nivel de validación

En esta página