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

Elija Cómo gestionar Documentos Inválidos

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

  • Rechaza cualquier inserción o actualización que viole los criterios de validación. Este es el comportamiento por defecto.

  • 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

Intentar 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

Intentar 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