Docs Menu
Docs Home
/ /
Validación de esquema

Elija cómo gestionar los documentos no vá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.

  • Permita que la operación continúe, pero registre la violación en el registro de MongoDB.

Rechazar documentos no válidos garantiza la coherencia del esquema. Sin embargo, en ciertos casos, podría ser conveniente permitir documentos no válidos, como una migración de datos que contenga documentos anteriores a la creación del esquema.

Tu esquema validationAction La opción determina cómo MongoDB maneja los documentos no válidos:

Acción de validación
Comportamiento

error

(Predeterminado) MongoDB rechaza cualquier inserción o actualización que viole los criterios devalidación.

warn

MongoDB permite que la operación continúe, pero registra la violació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 contacts con un validador de esquema JSON 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 no válido y evita 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 obligatorio 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 no válidos, pero registra documentos no válidos en el registro de MongoDB.

1

Cree una colección contacts2 con un validador de esquema JSON 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. Estos documentos 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 obligatorio 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

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

Volver

Especifique el nivel de validación

En esta página